欢迎来到!请参见关于页面以了解更多此工作原理的详情。
原始标题是“将冒号视为空白”,这不是一个问题描述,而是一个(有缺陷的)实现方法
为了 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: 应该是关键词}。
评论人:alexbarnosky
我觉得这会引起视觉上的困惑。
评论人:laurenpetit
请,求求不要。
哎呀,我脑子出了问题。我打字太快了,把逗号放错了地方。我本想冒号后面的形式需要有逗号。因此,{"a-json-key": 1234, ...} 是有效的,而 {"a-json-key": 应该是关键词 "another-json-key" foo} 会因为冒号是无效令牌而报错。然而,我觉得这没有必要。
评论人:solussd
如果支持了 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中犯下的错误...