它总是返回nil。
这难道不意味着它是纯的吗?
println会引起任何副作用吗?
副作用可以大致定义为“修改任何不属于函数本身的状态”。这包括写入磁盘或进行某种外部API调用等。由于println
会写入STDOUT
,因此它会改变stdout的状态。因此,它具有副作用。
它总是返回 nil。
这难道不意味着它是纯的吗?
只有当它没有副作用时,才意味着它是纯的。
println 会引起任何副作用吗?
是的,它会打印信息。
如果它没有副作用,那么它将非常无聊,因为它也不会返回任何有意义的内容。
我更喜欢使用术语引用透明性而不是纯度。如果一个表达式或函数是引用透明的,那么你可以用它的值替换它(反之亦然)而不改变程序的含义。这意味着,println
是引用透明的 当且仅当 我可以用 nil
替换任何出现的 println
或用 println
替换任何出现的 nil
而不改变程序的含义。显然,你不能这样做,因此,println
不是引用透明/纯的。