@ dave-griffith est mort.
Vous pouvez aussi appeler:
Function.tupled(foo _)
Si vous voulez errer dans « façon plus d'informations que j'ai demandé » territoire, il existe aussi des méthodes intégrées dans les fonctions partiellement appliquées (et sur Function
) pour le corroyage. Quelques exemples d'entrées/sorties:
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>
la version dans laquelle cari est invoquée avec plusieurs listes d'arguments:
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
Enfin, vous pouvez également uncurry/untuple si nécessaire. Function
a builtins pour cela:
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>
Et si foo se trouve être le constructeur d'une classe? – scout
Copie possible de [Comment appliquer une fonction à un tuple?] (Http://stackoverflow.com/questions/1987820/how-to-apply-a-function-to-a-tuple) – Suma