gpt4 book ai didi

clojure - Clojure 特殊形式 `def` 是否总是创建一个新的 Var?

转载 作者:行者123 更新时间:2023-12-02 18:56:44 25 4
gpt4 key购买 nike

我知道在 Clojure 中,命名空间将符号映射到 Var。因此,我们可以将符号 x 映射到 Var(此处位于默认命名空间中),如下所示:

user=> (def x 5)
#'user/x
user=> #'x
#'user/x
user=> (type #'x)
clojure.lang.Var
user=> x
5

现在,如果我随后这么说

user=> (def x 3)
#'user/x

我是否已将符号 x 重新绑定(bind)到全新的 Var,或者是否更新了上面创建的同一 Var 中的值?我怎么知道?

我认为是后者,因为我读到了“只有 Java 字段、变量、引用和代理在 Clojure 中是可变的”这句话。在 Clojure Reference page on Vars但我不确定这是否可以作为证据。

最佳答案

不,def并不总是创建一个新的Var。您可以使用相同?来确认这一点:

user=> (def x 5)
#'user/x
user=> (def v #'x)
#'user/v
user=> (def x 3)
#'user/x
user=> (identical? v #'x)
true

关于clojure - Clojure 特殊形式 `def` 是否总是创建一个新的 Var?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com