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

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

0
语法和读者

Clojure 1.10.1中使用合格关键字出现语法错误

user> :ns/1
Syntax error reading source at (REPL:136:1).
Invalid token: :ns/1

但我可以使用keyword构造它

users> (keyword "ns" "1")
:ns/1

我的问题是,第二个表单不是一个合法的测试表达式,不能用在case语句中。

1 个答案

+2

被选中
 
最佳答案

注意:我并不是有权决定Clojure语言是或不是的人,但作为一个观察多年的热心人,希望能提供一些背景信息。

这在Clojure中是一个历史性的前沿案例,多次被询问,但似乎在ask.clojure.org之前并未被提及。

关于此处官方文档的确切含义,解读有所不同https://clojure.org/reference/reader,但它确实提到“符号以非数字字符开头”和“关键字类似于符号,但……它们可以并且必须以冒号开头”。

函数keyword允许用户构建Clojure读取器无法读取的类型为keyword的值。如果您想要一个受限于只能构建Clojure读取器可以读取的keyword变体,最佳方式可能是编写一个函数,该函数(a)使用keyword构建keyword,然后(b)将其转换为字符串,并且(c)使用Clojure读取器尝试读取,如果生成的keyword不可读取,则返回某种错误状态,抛出异常,或者执行您想要的任何操作。

曾经有一个名为CLJ-1252的工单https://clojure.atlassian.net/browse/CLJ-1252,其中他们临时将Clojure读取器更改为不允许阅读一些以数字开头的keyword,但随后撤销了这个更改,因为一些库已经依赖于该行为,他们不想因为这个问题的向后兼容性而破坏它。

Alex Miller avatar
关于这个问题的常见问题解答(FAQ)可以在https://clojure.org/guides/faq#keyword_number找到。
...