我想改变代码的正常行为
(def a 5)
(def b a)
(def a 1)
b
5
对于这种行为
(def a 5)
(*something* b a)
(def a 1)
b
1
这只是为了学习目的,所以请不要尝试任何深刻的意义。
作为对 Jared314 答案的补充,我想指出,如果您将a
自己设为原子或引用,b
将自动成为指针或引用a
:
(def a (atom 5))
(def b a)
@b ;=> 5
(reset! a 1)
@b ;=> 1
当您重新定义 时,您不会像在另一种语言a
中那样更改 的值。将其视为常数a
可能会更好。a
您创建了一个新的a
. 这是 Clojure 设计理念的一部分。
原子:
(def a 5)
(def b (atom a))
@b ;=> 5
(def a 1)
@b ;=> 5
(reset! b a)
@b ;=> 1
参考:
(def a 5)
(def b (ref a))
@b ;=> 5
(def a 1)
@b ;=> 5
(dosync
(ref-set b a))
@b ;=> 1
注意:用于@
取消引用b
. 它是deref
函数的简写,是获取 的值所必需的b
。