@ dave-griffith está muerto.
También puede llamar a:
Function.tupled(foo _)
Si quieres pasear en el "camino más información que pedí" territorio, también hay métodos incorporados en funciones aplicadas parcialmente (y en Function
) para ganarse. Unos pocos ejemplos de entrada/salida:
scala> def foo(x: Int, y: Double) = x * y
foo: (x: Int,y: Double)Double
scala> foo _
res0: (Int, Double) => Double = <function2>
scala> foo _ tupled
res1: ((Int, Double)) => Double = <function1>
scala> foo _ curried
res2: (Int) => (Double) => Double = <function1>
scala> Function.tupled(foo _)
res3: ((Int, Double)) => Double = <function1>
// Function.curried is deprecated
scala> Function.curried(foo _)
warning: there were deprecation warnings; re-run with -deprecation for details
res6: (Int) => (Double) => Double = <function1>
caracterizado porque la versión de curry se invoca con múltiples listas de argumentos:
scala> val c = foo _ curried
c: (Int) => (Double) => Double = <function1>
scala> c(5)
res13: (Double) => Double = <function1>
scala> c(5)(10)
res14: Double = 50.0
Por último, también se puede uncurry/untuple si es necesario. Function
tiene órdenes internas para esto:
scala> val f = foo _ tupled
f: ((Int, Double)) => Double = <function1>
scala> val c = foo _ curried
c: (Int) => (Double) => Double = <function1>
scala> Function.uncurried(c)
res9: (Int, Double) => Double = <function2>
scala> Function.untupled(f)
res12: (Int, Double) => Double = <function2>
¿Qué pasa si foo resulta ser el constructor de alguna clase? – scout
Posible duplicado de [Cómo aplicar una función a una tupla?] (Http://stackoverflow.com/questions/1987820/how-to-apply-a-function-to-a-tuple) – Suma