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

欢迎!请参阅关于页面了解更多关于这是如何工作的信息。

0
规范

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

在 Clojure 1.8 中,这两个都是允许的

`
user=> (in-ns 'myns)

对象[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)

对象[clojure.lang.Namespace 0x61e45f87 "myns"]

myns=> (clojure.core/refer-clojure :only '[+ -])
nil
myns=> (clojure.core/refer-clojure :only ['+ '-])
在 REPL:1:1 触发宏展开时出现语法错误。
(quote +) - 失败: #{(quote quote)} 在:[:only :arg :quoted-spec :quote]
(quote +) - 失败: simple-symbol? 在:[:only :arg :spec] spec: :clojure.core.specs.alpha/only
(quote -) - 失败: simple-symbol? 在:[:only :arg :spec] 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报告)
...