作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Common LISP 的某些实现中,我们可以说对于以下表达式
(eq 'a 'a)
是 true
因为 'a
和 'a
是“同一个原子”。
这可能取决于具体实现,但似乎该短语(在流行的 LISP 教学书中使用)假定具有相同值的原子存储在内存中的相同位置。
在 Java 中,两个具有相同值的 interned 字符串存储在内存中的相同位置。
现在 JVM 上的 Clojure 继承了 Java 的遗产,但是说 Clojure(在 JVM 上)中具有相同值的两个原子是同一个原子是真的吗? (即Clojure的原子存储机制是如何工作的?)
最佳答案
首先,“原子”在 Clojure 中的含义与在大多数其他 Lisp 语言中的含义不同。参见 http://clojure.org/atoms
Clojure 的=
函数使用基于值 的相等性。所以两个具有相等值的对象将是 =
,即使它们存储在内存中的不同位置也是如此。
要测试两个对象是否实际上是同一个对象,位于内存中的相同地址,请使用 identical?
函数。
关于java - 在 clojure 中, (= 'a ' a) 指的是 'same atom' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3657118/
我是一名优秀的程序员,十分优秀!