Pointers 如何在clojure中创建引用/指针?
我想更改代码的正常行为Pointers 如何在clojure中创建引用/指针?,pointers,reference,clojure,Pointers,Reference,Clojure,我想更改代码的正常行为 (def a 5) (def b a) (def a 1) b 5 对这种行为 (def a 5) (*something* b a) (def a 1) b 1 这只是为了学习的目的,所以请不要试图在这方面有任何深刻的意义 当您重新定义a时,您不会像在另一种语言中那样更改a的值。最好将a看作一个常量。您已经创建了一个新的a。这是Clojure设计理念的一部分 如果你想要一个指针之类的东西,看看和 原子: 参考: 注意:使用@解除对b的引用。它是deref函数的简写,
(def a 5)
(def b a)
(def a 1)
b
5
对这种行为
(def a 5)
(*something* b a)
(def a 1)
b
1
这只是为了学习的目的,所以请不要试图在这方面有任何深刻的意义 当您重新定义
a
时,您不会像在另一种语言中那样更改a
的值。最好将a
看作一个常量。您已经创建了一个新的a
。这是Clojure设计理念的一部分
如果你想要一个指针之类的东西,看看和
原子:
参考:
注意:使用
@
解除对b
的引用。它是deref
函数的简写,需要获得b
的值,作为Jared314答案的补充,我想指出,如果你将a
本身作为原子或参考,b
将自动成为指向a
的指针或引用:
(def a (atom 5))
(def b a)
@b ;=> 5
(reset! a 1)
@b ;=> 1
这不是Lisp族语言中变量的工作方式。在普通Lisp中,可以使用符号宏来实现。我在谷歌上搜索了一下,发现了这样一个问题:请不要在编写函数式编程时使用命令式编程。
(def a 5)
(def b (ref a))
@b ;=> 5
(def a 1)
@b ;=> 5
(dosync
(ref-set b a))
@b ;=> 1
(def a (atom 5))
(def b a)
@b ;=> 5
(reset! a 1)
@b ;=> 1