从“Scala编程”一书中:
var assertionsEnabled = true
def myAssert(predicate: () => Boolean) =
if (assertionsEnabled && !predicate())
throw new AssertionError
myAssert(() => 5 > 3)
使用空参数列表很尴尬。Scala 提供了 by-name 参数来解决这个问题。
def byNameAssert(predicate: => Boolean) =
if (assertionsEnabled && !predicate)
throw new AssertionError
byNameAssert(5 > 3)
我在这个讨论中感到困惑。myAssert 接受一个作为函数的参数,而该函数又不接受任何参数并返回一个布尔值。
byNameAssert 的输入类型是什么?它与 myAssert 相同吗?对我来说,它似乎是一个计算结果为布尔值的表达式,并且以名称形式表示意味着表达式在被调用时被计算,而不是在被传递给时被计算byNameAssert。但是它与 myAssert 的输入类型不同。如果是这样的话,那么 byNameAssert 和 myAssert 就完全不同了。