请在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 创建了一个变量,这是一个有状态(可变)的盒子,指向一个值。这里的值都是字符串,是不可变的。

感谢@alexmiller
顺便问一下,如果值不是字符串,例如long,会怎样呢?

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

这些值也是不可变的吗?
by
是的,数字是不可变的,但几乎所有(所有?)语言都是如此。Clojure中的有趣之处在于集合是不可变的。

(def a-vec [1 2 3])

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

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