欢迎!请在关于页面查看更多关于如何使用它的信息。
Clojure 1.10.1中使用数字作为限定符关键词会产生语法错误
user> :ns/1 Syntax error reading source at (REPL:136:1). Invalid token: :ns/1
但我可以使用keyword构造它
keyword
users> (keyword "ns" "1") :ns/1
我的问题是第二种形式不是一个合法的测试表达式,不能用在case语句中。
case
注意:我并不是被授权决定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外的库依赖于该行为,因此他们撤回了这一更改,不想因为这个问题而破坏向后兼容性。