Asd*_*ren 3 functional-programming clojure
我是Clojure的新手,我读到它是一种功能语言.它说Clojure没有变量,当我找到(def n 5)时,它和变量之间有什么区别?
我可以改变var的值,所以它真的与变量不同吗?我不明白其中的区别.
假设variable你的意思是指一个可变的存储位置,我猜主要区别(取决于你比较的语言)是,如果你动态重新绑定varin Clojure是基于每个线程.
但是答案很长,var除非你真的需要引用可变存储位置,否则你通常不会在Clojure中使用.
Clojure使用值而不是引用来支持不变性和编程.
您可以观看Rich Hickey关于价值观的讨论.
总结一下,当您在Clojure中编程时,您拥有的是值,而不是对可能更改的位置的引用(甚至可能由另一个线程更改).
所以.
(let [a 1
_ (println a) => prints 1
a 2
_ (println a) => prints 2
])
Run Code Online (Sandbox Code Playgroud)
即使你a在代码中得到"改变" 的错觉,你也不会改变"旧" a,只是你有一个新的价值.(如果有人看过第一个定义,它仍会看到值1).
实际上你可以看到作为组合函数的赋值序列调用a范围中被替换的位置,但根本不是相同的"变量".
((fn [a]
(println a) => prints 1
((fn [a]
(println a) => prints 2
) 2) 1)
Run Code Online (Sandbox Code Playgroud)
尽管如此,如果你需要有许多潜在的线程访问该存储一个可变的存储,Clojure的给你 vars,atoms,refs,等.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |