Scala 中 "call by name" 和 Function0 的区别

Differences between "call by name" and Function0 in Scala

f: => Rf: () => R 有什么区别? 它们似乎以相同的方式工作,但它们的类型彼此不兼容。

这是完全不同的东西:f: => R - 它是一种函数参数(非常具体 - 请参阅 this discussion),f: () => R - 它是一个简单的函数。 它们似乎以相同的方式工作——因为它们确实以相同的方式工作——它们会在您每次调用它们时进行计算。按名称调用参数的优点是,如果它们未在函数体中使用,则它们不会被评估(并且它们是在您在函数中使用它们时计算的,而不是在您声明或调用它们时计算的 - 仅在评估该部分时使用此特定参数的功能)。另见 this (official description from scala-lang.org)