Scala语法:用于将Function0转换为function1的语法糖?

时间:2015-07-27 14:21:06

标签: scala

对于这个模糊的标题,我很难形容我的意思。出于这个原因,让我们直接深入研究代码:

def bar(b: Int => String) = b(23)
def foo(b: => String) = bar(_ => b)
foo("foo" + "bar")

我在play框架中发现了类似的代码,并想知道该代码实际发生了什么。我修改了一下,并认为bar(_ => b)将只创建一个带有所需参数类型的函数1(由bar签名给出)并使用给定的函数0生成返回值,忽略实际的参数功能1。

然而,这只是我试图弄清楚会发生什么,一个更明确的答案对我的理解会更好 - 除此之外,我可能完全错了。

1 个答案:

答案 0 :(得分:2)

除了=> String不是功能0 - () => String之外,你才是正确的。

=> String是一个按名称调用的字符串。它会在被引用时进行评估。

def foo(b: String) = bar(_ => b)也可以完成工作,但会急切地评估b