2024 Clojure现状调查中分享您的想法!

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

+1
Clojure

你好,

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

用户> {: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 关键字映射时出现了这个情况。

或许让读者将这个字符视为无效的符号会更合适?或者是这个字符在未来的版本中开始有更复杂的含义,导致向后兼容性可能出现危险吗?
by
请参阅https://clojure.org/guides/faq#unreadable_keywords了解为什么我们不验证这一点。使用不在读取列表上的字符将使您陷入未定义行为领域。
by
我对使用`|`来表示分隔命名的情况很感兴趣。这是否是在中期内计划的事情?这将允许像`:abc/|123|`这样的格式来读取吗?
by
这不是一个活跃的计划,但我们希望留出空间。是的,这就是我们的想法——当然如果这么做,将有很多问题需要回答。这与Common Lisp的多个转义字符很相似(https://www.lispworks.com/documentation/HyperSpec/Body/02_adea.htm)。
...