Scala中是否可以进行方法参数转发?

时间:2011-11-22 17:14:10

标签: scala methods parameter-passing

是否可以写出类似于:

的内容
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)

因此,在两个参数列表的类型和大小相同且不会重新定位参数的情况下,是否可以实现参数转发?

2 个答案:

答案 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