欢迎!请参阅关于页面了解更多有关如何操作的信息。
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读取器可以读取的keyword变体,最佳方式可能是编写一个函数,该函数(a)使用keyword构建keyword,然后(b)将其转换为字符串,并且(c)使用Clojure读取器尝试读取,如果生成的keyword不可读取,则返回某种错误状态,抛出异常,或者执行您想要的任何操作。
曾经有一个名为CLJ-1252的工单https://clojure.atlassian.net/browse/CLJ-1252,其中他们临时将Clojure读取器更改为不允许阅读一些以数字开头的keyword,但随后撤销了这个更改,因为一些库已经依赖于该行为,他们不想因为这个问题的向后兼容性而破坏它。