Clojure中副作用的意义

2 side-effects clojure

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

Syl*_*ter 7

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

(+ 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. 
Run Code Online (Sandbox Code Playgroud)

第一个表达是有效的.你可以用它的结果制作一个包含所有不同两个值的查找表,你就不会知道它们的区别.

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

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