gpt4 book ai didi

clojure - 为什么我可以在 Clojure 中更改不可变变量?

转载 作者:行者123 更新时间:2023-12-05 02:28:59 25 4
gpt4 key购买 nike

我来自 Javascript 世界,其中 const 用于声明不可变变量。

不可变变量的定义在 Clojure 中以相同的方式解释。

但是,这是允许的:

(def cheese "I like cheese")

...
...

(def cheese "Actually, I changed my mind)

当我运行它时,repl 给了我实际上,我改变了主意

在 JS 中,它会抛出错误,因为 const 无法更改。

如果有人能解释我对 clojure 世界中不可变变量 的理解哪里不正确,我将不胜感激?

谢谢

最佳答案

准确地说,Clojure 有不可变值,而不是不可变变量。毕竟,名称 Var 是“变量”的简写。

想象一下数字 5。你永远不需要担心谁“拥有”它,或者有人可能会改变它的定义。此外,在您的程序的许多部分中,可以有多个用于多种用途的该编号的多个副本。 Clojure 将这个想法扩展到集合值,例如向量 [1 2 3] 或映射 {:first "Joe":last "Cool"}

话虽如此,在 Clojure 中,Var 通常用于表示永远不会更改(尽管它可以)的全局“常量”值。对于确实发生变化的值,使用 Clojure Atom(全局或本地)是正常的。还有许多其他选项(例如,reduce 等函数有一个内部累加器)。

list of documentation sources是一个很好的起点,尤其是“Getting Clojure”和“Brave Clojure”这本书。

关于clojure - 为什么我可以在 Clojure 中更改不可变变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72391699/

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