@ dave-griffith è morto.
Si può anche chiamare:
Function.tupled(foo _)
Se si vuole vagare in "modo più informazioni di quante ho chiesto" il territorio, ci sono anche metodi incorporati in funzioni parzialmente applicate (e su Function
) per accattivarsi. Alcuni esempi di ingresso/uscita:
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>
in cui la versione al curry viene richiamato con più liste di argomenti:
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
Infine, è anche possibile uncurry/untuple, se necessario. Function
ha comandi incorporati per questo:
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>
fonte
2010-08-25 16:31:53
Cosa succede se foo sembra essere il costruttore di qualche classe? – scout
Possibile duplicato di [Come applicare una funzione a una tupla?] (Http://stackoverflow.com/questions/1987820/how-to-apply-a-function-to-a-uple) – Suma