2024 Clojure 状态调查!中分享你的想法。

欢迎!请查看关于页面了解更多关于如何使用本站的信息。

+1
Clojure

你好,

在 clj 和 cljs 中,管道字符 | 都被接受为符号构成字符

user> {:one|two 'three|four}
{:one|two three|four}

cljs.user> {:one|two 'three|four}
{:one|two three|four}

尽管它并未在官方文件中提及

https://clojure.org/reference/reader#_symbols
https://github.com/edn-format/edn#symbols

由于它作为这样的字符被读取器接受,我们是否可以假设它是一个有效的符号构成字符呢?

谢谢

1 答案

+3

你不应该使用 |,它在保留用于可能的分隔命名。

具体来说,像 :one|two 'three|four 这样的结构在未来可能实际上会被读取为一个包含空格和引号的单一关键词。

谢谢,我遇到的情况是在将 Java HashMap 转换为键化为 Clojure Map 时出现这个关键词键。

或许让读取器抛出这个字符对于符号是无效的作为异常更好?或者是否存在风险,如果在此版本之后该字符开始具有更复杂的意义,可能会破坏向后兼容性?
请参阅https://clojure.org/guides/faq#unreadable_keywords了解为何不进行验证。使用不在读取列表中的字符会进入未定义行为区域。
我对使用`|`作为分隔符的命名符的状态表示好奇。这是否是中期计划的内容?这将允许使用:abc/123eg 以:abc/|123|或者类似的方式读取,对吗?
虽然没有积极计划,但这是我们希望留出空间的地方。是的,这是想法——当然,如果这样做,会有很多问题需要回答。这与Common Lisp的多重转义字符类似(https://www.lispworks.com/documentation/HyperSpec/Body/02_adea.htm)。
...