是否可以写出类似于:
的内容def foo(x: Int, y: Double)
def bar(x: Int, y: Double) = foo(_)
我想避免重复自己说:
def foo(x: Int, y: Double)
def bar(x: Int, y: Double) = foo(x, y)
因此,在两个参数列表的类型和大小相同且不会重新定位参数的情况下,是否可以实现参数转发?
答案 0 :(得分:10)
是的,如果功能栏除了完全转发到foo
之外什么都不做,您可以执行以下操作:
def foo(x : Int, y : Double) { println("X: " x + " y: " + y) }
def bar = foo _
bar(1,3.0)
//prints out "X: 1 y: 3.0"
在这种情况下,下划线表示您想要返回函数foo
本身,而不是调用它并返回重新连接。这意味着当调用bar
时,它将只返回函数foo
,然后使用您提供的参数调用该函数。
答案 1 :(得分:3)
是的,但这有点像双关语
def foo(x: Int, y: Double):Int = 3
def bar = foo(_, _)
在这种情况下,bar不是采用int和double的方法。相反,它是一个不带参数的方法,返回一个带有和int的函数。从呼叫者的角度来看,这些可以互换使用。
bar(3, 5.9) // expands to bar apply(3, 5.9), which calls foo