【发布时间】:2012-07-24 04:48:36
【问题描述】:
我正在学习 Clojure,我无法理解一些语言设计决策:为什么像 Clojure 这样具有不可变字符串的语言也需要关键字和符号数据类型?字符串不能只有可选的名称空间和元数据以及所有这些东西吗?对于不可变字符串比较也可以是身份基础,不是吗?
或者,既然与 Java 的互操作是 Clojure 必须具备的,那么至少要有 Java String 类型和 KeywordSymbol 数据类型。
我发现这种字符串/关键字/符号“三分法”特别奇怪,因为 Clojure 似乎非常注重“纯度”并在其他方面保持简单。
【问题讨论】:
-
不,不变性并不意味着身份比较就足够了,您仍然可以拥有多个具有相同内容的不可变实例。该假设仅适用于实习字符串。