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已经有map的读取语法了。如果我们支持JSON,难道也要支持ruby map字面量?在我看来,这个添加只会增加困惑,因为冒号在关键字中使用且关键字在map中频繁使用 - 例如在从XML解序列化或甚至JSON时。:)

0

评论来自:dnolen

Clojure不再只是一种在JVM上运行的编程语言。Clojure还可以在CLR和JavaScript上运行。特别是ClojureScript目前难以轻松处理JSON字面量 - 这是一个极为常见(尽管存在问题)的数据格式。通过在map字面量中允许冒号空白,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 提出)
...