Clojure中副作用的意义

时间:2015-08-08 23:42:01

标签: clojure side-effects

我在思考Clojure中副作用的含义。 Clojure的副作用究竟是什么?任何人都可以用一个例子来解释这个吗?

1 个答案:

答案 0 :(得分:6)

任何编程语言的副作用都是所做的一切,它与提供的参数和返回的结果之间没有直接的关联。

(+ 3 4)      ; ==> 7 (result is always a mapping between arguments and result. It will always be 7 no matte rhow many times you do it. 
(rand-int 4) ; ==> 0,1,2, or 3. You have no idea what it will produce next. 

第一个表达是有效的。您可以使用它的结果创建所有不同两个值的查找表,但您不会知道其中的差异。

第二个可能会为同一个参数提供不同的结果。计算必须基于其他内容,如内部状态,而不是单独的参数。它有副作用。

程序中使用的典型副作用是I / O和对象变异。