对于这个模糊的标题,我很难形容我的意思。出于这个原因,让我们直接深入研究代码:
def bar(b: Int => String) = b(23)
def foo(b: => String) = bar(_ => b)
foo("foo" + "bar")
我在play框架中发现了类似的代码,并想知道该代码实际发生了什么。我修改了一下,并认为bar(_ => b)
将只创建一个带有所需参数类型的函数1(由bar
签名给出)并使用给定的函数0生成返回值,忽略实际的参数功能1。
然而,这只是我试图弄清楚会发生什么,一个更明确的答案对我的理解会更好 - 除此之外,我可能完全错了。
答案 0 :(得分:2)
除了=> String
不是功能0 - () => String
之外,你才是正确的。
=> String
是一个按名称调用的字符串。它会在被引用时进行评估。
def foo(b: String) = bar(_ => b)
也可以完成工作,但会急切地评估b
。