纯粹的表达在Scala中意味着什么?

时间:2015-10-14 21:39:23

标签: scala

我有两个问题。第一个:code是纯粹的表达吗?

lazy val code: Unit = {

    // block of code

    var s = "abc"
    for (i <- 0 until 10) println(i)
    s += s concat "def"
    println(s)

}

第二个问题:纯粹的表达是什么意思?这是一些不返回任何内容的代码吗?

1 个答案:

答案 0 :(得分:5)

纯表达式是一种仅用于产生结果值的计算 - 它没有副作用。对于上面的字段code,您调用将内容打印到控制台(println),这被视为副作用,因此它不是纯表达式。纯表达式的一个例子是:

lazy val foo = 2 + 3

它除了为foo生成最终值之外什么都不做,并且可以安全地被计算结果(5)替换,而不会以任何方式改变程序的结果。如果你在上面的代码中做了这样的替换:

lazy val code: Unit = ()

你会改变程序 - 它不再向控制台打印任何内容。

查看here,例如,有关纯函数和纯表达式的更多信息,以及它们在函数式编程中的重要性。