【发布时间】:2018-05-04 17:17:58
【问题描述】:
我正在阅读 Scala 中的函数式编程这本书并遇到以下句子:
如果表达式的计算永远运行或抛出错误 而不是返回一个确定的值,我们说表达式确实 不终止,或者它评估为底部。函数
f是 如果表达式f(x)对于所有x计算结果为底部,则为严格 评估到底部。
这句话是什么意思?有人可以给我举个例子吗?
【问题讨论】:
标签: scala
我正在阅读 Scala 中的函数式编程这本书并遇到以下句子:
如果表达式的计算永远运行或抛出错误 而不是返回一个确定的值,我们说表达式确实 不终止,或者它评估为底部。函数
f是 如果表达式f(x)对于所有x计算结果为底部,则为严格 评估到底部。
这句话是什么意思?有人可以给我举个例子吗?
【问题讨论】:
标签: scala
严格意味着如果函数的参数未定义,则函数的返回值未定义。差不多就这些了。
相反的是非严格性,这意味着一个表达式可以有一个值,即使它们的某些子表达式是未定义的。
绝大多数编程语言都是严格的。然而,大多数编程语言至少有一种非严格结构:布尔运算符。例如,在 Scala 中,这个 将 是未定义的(抛出异常):
def foo(bar: Boolean, baz: Boolean) = bar
foo(true, { throw new Exception; false })
因为foo 是严格的,但这不会:
true || { throw new Exception; false }
//=> res0: Boolean = true
因为||在其第二个参数中是非严格的,这意味着即使某些参数未定义,也可以定义返回值。
注意:严格/非严格不与急切/懒惰相同。
【讨论】: