严格的正式定义

时间:2017-03-21 10:32:47

标签: scala

我正在阅读Scala中的函数式编程,并遇到以下句子:

  

如果对表达式的求值永远运行或抛出错误   而不是返回一个确定的值,我们说表达式   不终止,或评估到底部。函数f是   如果表达式f(x)评估为所有x的底部,则为strict   评估到底。

这句话是什么意思?有人可以给我看一个例子吗?

1 个答案:

答案 0 :(得分:3)

严格意味着如果未定义函数的参数,则函数的返回值是未定义的。这就是它。

相反的是非严格性,这意味着即使某些子表达式未定义,表达式也可以有一个值。

绝大多数编程语言都是严格的。但是,大多数编程语言至少有一个非严格的构造:布尔运算符。例如,在Scala中,此未定义(抛出异常):

def foo(bar: Boolean, baz: Boolean) = bar

foo(true, { throw new Exception; false })

因为foo是严格的,但不会:

true || { throw new Exception; false }
//=> res0: Boolean = true

因为||在其第二个参数中是非严格的,这意味着即使某些参数未定义,也可以定义返回值。

注意:strict / non-strict 与eager / lazy相同。