【问题标题】:Formal definition of strictness严格性的正式定义
【发布时间】:2018-05-04 17:17:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: scala


    【解决方案1】:

    严格意味着如果函数的参数未定义,则函数的返回值未定义。差不多就这些了。

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

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

    def foo(bar: Boolean, baz: Boolean) = bar
    
    foo(true, { throw new Exception; false })
    

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

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

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

    注意:严格/非严格与急切/懒惰相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多