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 )
  )

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

(def a-vec [1 2 3])

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

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