2024 年 Clojure 状况调查 中分享您的想法!

欢迎!请查看关于页面以了解更多关于如何使用本平台的详情。

0
Clojure 来自

你好,

我是 Clojure 初学者,我不懂不可变数据的概念。
因为编译器允许我在下面多次声明 'girl1':

(when true
  (def girl1 "stephanie")
  (def girl1 "ann")
  (def girl3 "victoria")
  (println girl1 girl3))

输出

ann victoria
nil

1 个答案

0
来自

def 创建一个具有可变状态的 var,它是一个指向值的可变盒子。这里的值都是字符串,它们是不可变的。

来自
谢谢 @alexmiller
顺便问一下,如果值不是字符串,例如长整型,又会怎样?

(when true
  (def girl4 4)
  (def girl4 5)
  (def girl5 6)
  (println girl4 girl5 )
  )

值仍然是不可变的吗?
是的,数字是不可变的,但这一点在大多数(所有?)语言中都是如此。在Clojure中有趣的是,集合是不可变的。

(def a-vec [1 2 3])

(conj a-vec 4)
;;=> [1 2 3 4]

a-vec
;;=> [1 2 3]
...