欢迎!请查看关于页面以了解更多关于此如何运作的信息。
原始标题是“将冒号视为空白”,这不是问题描述,而是一个(有缺陷的)实现方法
对于JSON兼容性没有空格时的已知问题 - x:true 和 y:false
评论由:tsdh
讨论在此:https://groups.google.com/d/msg/clojure/XvJUzaY1jec/l8xEwlFl8EUJ
评论由:hiredman
请不要
评论由:tavisrudd
Alan Malloy在一个Google Group讨论中提出了一个很好的观点(https://groups.google.com/d/msg/clojure/XvJUzaY1jec/aVpWBicwGhsJ)关于意外的尾随(或悬空)冒号和前导冒号之间的混淆"这甚至不仅仅是“将它们看作空白”那么简单因为,假设你可能希望 (read-string "{a: b}")结果会在这里得到。但是通过read-string "{a :b}"会导致错误,因为:(hash-map 'a :b)。
read-string "{a :b}"
(hash-map 'a :b)
可以通过仅将冒号之后的逗号视为空白字符来避免这个问题。由于粘贴JSON似乎是个关键动机,所以逗号无论如何都会存在:{"v":, 1234}是有效的,而{a-key: should-be-a-keyword}则会产生语法错误。
{"v":, 1234}
{a-key: should-be-a-keyword}
评论者:alexbaranosky
在我看来,这样会更让人困惑。
评论者:laurentpetit
求你了,就不能这样。
哎,头脑一片空白。我打字太快,把逗号放错位置了。在我脑子里,冒号之后的格式后面应该有一个逗号。因此,{"a-json-key": 1234, ...}将是有效的,而{"a-json-key": was-supposed-to-be-a-keyword "another-json-key" foo}则会因冒号是无效标记而抱怨。不过,我觉得没有必要这么做。
{"a-json-key": 1234, ...}
{"a-json-key": was-supposed-to-be-a-keyword "another-json-key" foo}
评论者:solussd
Clojure已经有一个地图的读取器语法。如果我们支持JSON,我们也支持ruby映射字面量吗?在我看来,这个添加只会增加混乱。
评论者:dnolen
Clojure不再只是JVM上的语言。Clojure还托管在CLR和JavaScript上。特别是ClojureScript目前处理JSON字面量很困难——这是一个极其常见但问题严重的数据格式。通过在映射字面量中允许冒号空白字符,Clojure数据结构可以有效地成为可扩展的JSON超集,从而结合了JSON的简洁性和XML的表达力。
我也这么看。
评论者:timmc
Clojure 仅托管在 JVM 上;ClojureScript 托管在 JS 虚拟机上。如果这对 CLJS 有用,它应当只是一个 CLJS 功能。
评论者:mikera
-1 对这个整个想法表示反对:这会导致疯狂...
如果我们继续添加这样的语法怪癖,那么语言将会变得难以维护。有很多要记住的特殊情况和含糊不清,这与简单恰恰相反。
如果人们想要使用 JSON,那也行,但那时最好的做法是使用特定的 JSON 解析器/写入器,而不是只是粘贴到 Clojure 源代码中。
评论者:laczoka
-1 原因同 Allan Malloy 和 Mike Anderson 指出的。
评论者:bozhidar
-1 不要重复 Ruby 中犯过的错误...