请在 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值的keyword变种,可能最好的方法是编写一个函数,该函数(a)使用keyword构造关键词,(b)将该关键词转换为字符串,(c)尝试使用Clojure读者读取它,如果生成的关键词不可读,则返回某种错误状态,抛出异常等。

曾经有一个名为CLJ-1252的票据https://clojure.atlassian.net/browse/CLJ-1252,他们在其中临时将该Clojure读者更改为不允许读取以数字开头的某些关键词,但由于一些库依赖该行为,所以他们回滚了这次更改,不想因为这个原因破坏向后兼容性。

by
有关此内容的常见问题解答条目可在https://clojure.org/guides/faq#keyword_number找到。
...