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投票

评论人:alexbarnosky

我觉得这会引起视觉上的困惑。

0投票

评论人:laurenpetit

请,求求不要。

0投票

评论者:tavisrudd

哎呀,我脑子出了问题。我打字太快了,把逗号放错了地方。我本想冒号后面的形式需要有逗号。因此,{"a-json-key": 1234, ...} 是有效的,而 {"a-json-key": 应该是关键词 "another-json-key" foo} 会因为冒号是无效令牌而报错。然而,我觉得这没有必要。

0投票

评论人:solussd

如果支持了 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投票
...