欢迎!请参阅关于页面了解有关此工作的更多信息。
原始标题为“将冒号视为空白”,这并不是问题描述,而是一个(有缺陷的)实现方法
对于 JSON 兼容性没有空格时的已知问题 - x:true 和 y:false
评论者:tsdh
在此讨论:https://groups.google.com/d/msg/clojure/XvJUzaY1jec/l8xEwlFl8EUJ
评论者:hiredman
请勿
评论者: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: 应该是关键词}。
评论者:alexbaranosky
在我看来,这可能会产生视觉困扰。
评论者:laurentpetit
求求你,请不要这样。
哎呀,我犯了一个错误。我打字时比思考快,把逗号放错了地方。在我的脑海中,意思是冒号后面的形式后面应该有一个逗号。因此,{"a-json-key": 1234, ...} 是有效的,而 {"a-json-key": was-supposed-to-be-a-keyword "another-json-key" foo} 会抱怨冒号是无效标记。然而,我认为没有必要。
评论者:solussd
Clojure 已经拥有了映射的读取器语法。如果我们支持JSON,我们也支持Ruby映射字面量吗?在我看来,这个添加只会造成混乱——冒号在关键词中使用,而关键词在映射中使用频率很高——例如,从XML或甚至JSON的反序列化中。:)
评论者:dnolen
Clojure 不再仅托管在JVM上。Clojure 还托管在CLR和JavaScript上。特别是ClojureScript目前无法轻松处理JSON字面量——一个非常常见(虽然有问题)的数据格式。通过在映射字面量中允许冒号空格,Clojure数据结构可以有效地成为可扩展的JSON超集,兼具JSON的简洁性和XML的表达性。
我同意。
由:timmc发表的评论
Clojure 仅在 JVM 上运行;ClojureScript 在 JS VM 上运行。如果这对 CLJS 有用,那么它应该只是 CLJS 的一个特性。
由:mikera发表的评论
反对这个整体想法:这样会导致疯狂...
如果我们继续添加像这样的语法怪癖,这个语言将变得难以维护。有大量你需要记住的特殊情况和歧义,这恰恰是简单的反义词。
如果人们想使用 JSON,那当然可以,但那时最好的方法是使用特定的 JSON 解析器/编写器,而不仅仅是将其粘贴到 Clojure 源代码中并期望它能工作。
由:laczoka发表的评论
同意 Allan Malloy 和 Mike Anderson 提到的理由
由:bozhidar发表的评论
反对:不要重复 Ruby 中犯的错误...