提供以下方案:
def add(a: Int, b: Int): Int = a + b
def f1(adder: () => Int) = adder()
f1(add(1,2) _) // Does **NOT** compile, because add seems to be already executed
f1(() => add(1,2)) // This works, but seems to be ugly
Run Code Online (Sandbox Code Playgroud)
有没有办法让它与下划线一起使用?
您可以通过使用by-name参数使其在没有下划线的情况下工作:
scala> def f2(adder: => Int) = adder
f2: (adder: => Int)Int
scala> f2(add(1,2))
res0: Int = 3
Run Code Online (Sandbox Code Playgroud)
你的第3行的问题是f1 需要一个用空参数调用的函数.通过名称参数,您可以传入任何导致给定类型的任意表达式,并且在方法体内使用它之前不会对其进行求值.如果要在方法体内的多个位置使用by-name参数,但不希望它重新评估,可以通过将其分配给a来缓存它lazy val.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |