我在思考Clojure中副作用的含义。 Clojure的副作用究竟是什么?任何人都可以用一个例子来解释这个吗?
答案 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和对象变异。