首页 > 解决方案 > Scala中“按名称调用”和Function0之间的区别

问题描述

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

标签: scalahigher-order-functionscallbyname

解决方案


这是完全不同的东西:f: => R- 它是一种函数参数(非常具体 - 请参阅此讨论),f: () => R- 它是一个简单的函数。它们似乎以相同的方式工作 - 因为它们实际上以相同的方式工作 - 他们每次调用它们时都会计算。按名称调用参数的优点是,如果它们未在函数体中使用,则不会对其进行评估(并且当您在函数中使用它们时计算它们,而不是在您声明它们或调用它们时 - 仅在评估该部分时使用此特定参数的功能)。另请参阅(来自 scala-lang.org 的官方描述)


推荐阅读