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