请在 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 转换为 Keywordized Clojure Map 时出现了关键字键。

也许将读者抛出无效字符来表示这些符号更好?或者,如果这个字符在后续版本中开始具有更复杂的意义,那么向后兼容性可能会破坏,这是否存在危险?
by
请参阅https://clojure.org/guides/faq#unreadable_keywords了解我们不验证此内容的理由。通过使用不在读取列表上的字符,你将进入未定义行为区域。
by
我对使用`|`作为该命名分隔符的状态感兴趣。这是否是中短期内计划的事项?这将能否允许以`:abc/|123|`或类似格式读取`:abc/123`?
by
这并不是积极计划中的,但我们希望留出空间。是的,这是想法 - 如果这样做,当然会有很多问题需要回答。这和Common Lisp多重转义字符(https://www.lispworks.com/documentation/HyperSpec/Body/02_adea.htm)相似。
...