Возможна ли пересылка параметров метода в Scala? - PullRequest
4 голосов
/ 22 ноября 2011

Можно ли написать что-то похожее на:

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 ]

10 голосов
/ 22 ноября 2011

Да, если функциональная панель ничего не делает, кроме точного перенаправления на 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, которая затем будет вызываться с указанными вами аргументами.

3 голосов
/ 22 ноября 2011

Да, но это немного каламбур

def foo(x: Int, y: Double):Int = 3

def bar = foo(_, _)

В этом случае bar - это не метод, принимающий int и doubleВместо этого это метод, не имеющий аргументов, возвращающий функцию, которая принимает значение типа int и double.С точки зрения вызывающего абонента, они могут использоваться взаимозаменяемо.

bar(3, 5.9)  // expands to bar apply(3, 5.9), which calls foo
...