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读取器可以读取的关键字值,可能最好的办法是编写一个函数,(a)使用keyword构建关键词,(b)将其转换为字符串,(c)尝试使用Clojure读取器读取,如果结果关键词不可读,返回某种错误状态,抛出异常,或执行您想要的任何操作。

之前有一个工单CLJ-1252 https://clojure.atlassian.net/browse/CLJ-1252,他们临时将Clojure读取器改为不允许读取带前导数字的一些关键词,但由于一些wild外的库依赖于该行为,因此他们撤回了这一更改,不想因为这个问题而破坏向后兼容性。

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