2024 年 Clojure 状态调查中分享您的想法!

欢迎!请参阅 关于 页面以获取更多关于如何使用本站的信息。

0
Spec

CLJ-2062 中添加的 refer-clojure 规范仅支持有限的引号。

Clojure 1.8 中,这两者都是允许的

`
user=> (in-ns 'myns)

object[clojure.lang.Namespace 0x579d011c "myns"]

myns=> (clojure.core/refer-clojure :only '[+ -])
nil
myns=> (clojure.core/refer-clojure :only ['+ '-])
nil
`

但在 1.9/1.10 中,第一个是有效的,但第二个会引发错误

`
Clojure 1.10.0
user=> (in-ns 'myns)

object[clojure.lang.Namespace 0x61e45f87 "myns"]

myns=> (clojure.core/refer-clojure :only '[+ -])
nil
myns=> (clojure.core/refer-clojure :only ['+ '-])
在 (REPL:1:1) 处宏展开 clojure.core/refer-clojure 时发生语法错误。
(quote +) - 失败:#{(quote quote)} 在:[:only :arg :quoted-spec :quote]
(quote +) - 失败:simple-symbol? 在:[:only :arg :spec] 规范::clojure.core.specs.alpha/only
(quote -) - 失败:simple-symbol? 在:[:only :arg :spec] 规范::clojure.core.specs.alpha/only
`

原因:这是由于引号规范的定义方式造成的,它只允许一个引号列表,而不是符号的引号列表或引号符号的列表。此类问题在使用 import 时也存在,例如 (import (link: 'java.util 'Date)) 会以类似的方式失败,但这种做法不常见,人们通常不会通过引号内部符号而不是外部的列表来调用 import (import '(link: java.util Date)).

建议:为了与 1.8 的支持相匹配,需要包含符号的引号列表和引号符号列表的规范。

2 个答案

0

评论者:alexmiller

由于这种使用模式的罕见性(这是自从被添加以来超过 2 年第一次报告),我将将其标记为低优先级。

0
参考:https://clojure.atlassian.net/browse/CLJ-2461(由 alexmiller 报告)
...