我有两个问题。第一个:code
是纯粹的表达吗?
lazy val code: Unit = {
// block of code
var s = "abc"
for (i <- 0 until 10) println(i)
s += s concat "def"
println(s)
}
第二个问题:纯粹的表达是什么意思?这是一些不返回任何内容的代码吗?
答案 0 :(得分:5)
纯表达式是一种仅用于产生结果值的计算 - 它没有副作用。对于上面的字段code
,您调用将内容打印到控制台(println
),这被视为副作用,因此它不是纯表达式。纯表达式的一个例子是:
lazy val foo = 2 + 3
它除了为foo
生成最终值之外什么都不做,并且可以安全地被计算结果(5
)替换,而不会以任何方式改变程序的结果。如果你在上面的代码中做了这样的替换:
lazy val code: Unit = ()
你会改变程序 - 它不再向控制台打印任何内容。
查看here,例如,有关纯函数和纯表达式的更多信息,以及它们在函数式编程中的重要性。