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
顺便问一下,如果值不是字符串,比如long呢?

(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]
...