首页 > 解决方案 > 为什么 println 被认为是不纯函数?

问题描述

我正在阅读 scala 编程的书,据说:

...在这种情况下,它的副作用是打印到标准输出流。

而且我看不出副作用在哪里,因为对于相同的输入, println 将打印相同的输出(我认为) 例如任何时候我们调用
更新:

println(5)

它会打印5,我没有看到调用println(5)会打印 5 以外的值的情况!

标签: scalafunctional-programmingpure-function

解决方案


您可以通过将表达式替换为其结果来判断表达式是否具有副作用。如果程序改变了含义,就会产生副作用。例如,

println(5)

是一个不同的程序

()

也就是说,副作用是未编码在评估表达式的结果中的任何可观察到的效果。这里的结果是(),但该值中没有任何内容可以编码 5 现在出现在屏幕上的某处这一事实。


推荐阅读