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

欢迎!请参阅关于页面了解有关此工作的更多信息。

0
语法和读取器

原始标题为“将冒号视为空白”,这并不是问题描述,而是一个(有缺陷的)实现方法

对于 JSON 兼容性
没有空格时的已知问题 - x:true 和 y:false

13 答案

0
0

评论者:hiredman

请勿

0

评论者:tavisrudd

Alan Malloy 在谷歌组讨论中提出了一个很好的观点(https://groups.google.com/d/msg/clojure/XvJUzaY1jec/aVpWBicwGhsJ)关于意外的尾随(或浮动)冒号与前置冒号的混淆
“甚至不仅仅是“让它们成为空白”这么简单
因为想必你希望 (read-string "{a: b}")
结果为(hash-map 'a 'b),但(read-string "{a :b}") 的结果
(hash-map 'a :b)。"'

可以通过仅将冒号视为空格来避免此问题,当其后跟逗号时。由于易于剪切粘贴JSON似乎是这里的关键动机,因此逗号肯定会在那里:有效的 {"v":, 1234} 与语法错误 {a-key: 应该是关键词}。

0

评论者:alexbaranosky

在我看来,这可能会产生视觉困扰。

0

评论者:laurentpetit

求求你,请不要这样。

0

评论者:tavisrudd

哎呀,我犯了一个错误。我打字时比思考快,把逗号放错了地方。在我的脑海中,意思是冒号后面的形式后面应该有一个逗号。因此,{"a-json-key": 1234, ...} 是有效的,而 {"a-json-key": was-supposed-to-be-a-keyword "another-json-key" foo} 会抱怨冒号是无效标记。然而,我认为没有必要。

0

评论者:solussd

Clojure 已经拥有了映射的读取器语法。如果我们支持JSON,我们也支持Ruby映射字面量吗?在我看来,这个添加只会造成混乱——冒号在关键词中使用,而关键词在映射中使用频率很高——例如,从XML或甚至JSON的反序列化中。:)

0

评论者:dnolen

Clojure 不再仅托管在JVM上。Clojure 还托管在CLR和JavaScript上。特别是ClojureScript目前无法轻松处理JSON字面量——一个非常常见(虽然有问题)的数据格式。通过在映射字面量中允许冒号空格,Clojure数据结构可以有效地成为可扩展的JSON超集,兼具JSON的简洁性和XML的表达性。

我同意。

0

由:timmc发表的评论

Clojure 仅在 JVM 上运行;ClojureScript 在 JS VM 上运行。如果这对 CLJS 有用,那么它应该只是 CLJS 的一个特性。

0

由:mikera发表的评论

反对这个整体想法:这样会导致疯狂...

如果我们继续添加像这样的语法怪癖,这个语言将变得难以维护。有大量你需要记住的特殊情况和歧义,这恰恰是简单的反义词。

如果人们想使用 JSON,那当然可以,但那时最好的方法是使用特定的 JSON 解析器/编写器,而不仅仅是将其粘贴到 Clojure 源代码中并期望它能工作。

0

由:laczoka发表的评论

同意 Allan Malloy 和 Mike Anderson 提到的理由

0

由:bozhidar发表的评论

反对:不要重复 Ruby 中犯的错误...

0
参考:[https://clojure.atlassian.net/browse/CLJ-899](https://clojure.atlassian.net/browse/CLJ-899)(由 stu 报告)
...