2024 Clojure 状态调查中分享您的想法!

欢迎!请查看关于页面以获取此工作方式的一些更多信息。

0
语法和读取器

原始标题是'treat colons as whitespace',这不是问题描述,而是一种(有缺陷的)实现方法

为了与 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 已经有用于映射的读取器语法。如果我们支持 JSON,我们也支持 Ruby 映射字面量吗?在我看来,这个添加只会增加混淆,因为冒号在关键字中也有使用,而关键字在映射中经常用到,例如从 XML 或 JSON 反序列化时。:)

0

评论者:dnolen

Clojure 已不再仅托管在 JVM 上。Clojure 也可以托管在 CLR 和 JavaScript 上。特别是 ClojureScript 目前无法轻松处理 JSON 字面量 - 这是一种极其常见但有问题(虽然)的数据格式。通过在映射字面量中允许冒号空格 - Clojure 数据结构可以有效地成为一个可扩展的 JSON 子集,提供 JSON 的简洁性和 XML 的表达能力。

我也支持这一点。

0
by

评论由:timmc 撰写

Clojure 只在 JVM 上运行;ClojureScript 在 JS VM 上运行。如果这对于 CLJS 有用,那么它应该只是一种 CLJS 功能。

0
by

评论由:mikera 撰写

对这个整个想法投反对票:从这条路走下去就是疯狂……

如果我们继续添加这样的语法怪癖,那么语言将变得难以维护。有很多特殊情况和歧义是你必须记住的,这是简单性的完全相反。

如果人们想使用 JSON,那很好,但最好使用特定的 JSON 解析器/写入器,而不是将其粘贴到 Clojure 源代码中并希望它能工作。

0

评论由:laczoka 撰写

-1 由于 Allan Malloy 和 Mike Anderson 提到的原因

0
by

评论由:bozhidar 撰写

-1 不要重复 Ruby 中的错误……

0
by
...