我正在阅读Scala中的函数式编程,并遇到以下句子:
如果对表达式的求值永远运行或抛出错误 而不是返回一个确定的值,我们说表达式 不终止,或评估到底部。函数
f
是 如果表达式f(x)
评估为所有x
的底部,则为strict 评估到底。 p>
这句话是什么意思?有人可以给我看一个例子吗?
答案 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相同。