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

欢迎!请参阅 关于 页面获取更多有关如何工作的信息。

0票数
规范

在 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 ['+ '-])
在宏展开 clojure.core/refer-clojure 时出现语法错误(REPL:1:1)。
(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 (link: 'java.util 'Date)) 以类似的方式失败,但人们很少使用引号调用导入内部符号,而不是外部的列表(import '(link: java.util Date))。

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

2 答案

0票数

评论由中国:alexmiller 提出

由于这种用法模式很少见(自添加以来已有2年多的第一起报告),我将将其标记为次要优先级。

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