我想改变代码的正常行为
(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。