Scala中“按名称调用”和Function0之间的区别

时间:2018-09-17 19:55:09

标签: scala higher-order-functions callbyname

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

1 个答案:

答案 0 :(得分:1)

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