How to apply a function to a tuple?

It should be easy. How to apply a function to a tuple in Scala? Viz:

 scala> def f (i: Int, j: Int) = i + j
 f: (Int, Int) Int

 scala> val p = (3.4)
 p: (Int, Int) = (3.4)

 scala> fp
 : 6: error: missing arguments for method f in object $ iw;
 follow this method with `_ 'if you want to treat it as a partially applied function
        fp
        ^

 scala> f _ p
 : 6: error: value p is not a member of (Int, Int) => Int
        f _ p
            ^

 scala> (f _) p
 : 6: error: value p is not a member of (Int, Int) => Int
        (f _) p
              ^

 scala> f (p)
 : 7: error: wrong number of arguments for method f: (Int, Int) Int
        f (p)
        ^

 scala> grr!

Thank you very much in advance.

+38
scala
Jan 01 '09 at 3:58
source share
3 answers

In Scala 2.7:

scala> def f (i : Int, j : Int) = i + j f: (Int,Int)Int scala> val ff = f _ ff: (Int, Int) => Int = <function> scala> val fft = Function.tupled(ff) fft: ((Int, Int)) => Int = <function> 

In Scala 2.8:

 scala> def f (i : Int, j : Int) = i + j f: (i: Int,j: Int)Int scala> val ff = f _ ff: (Int, Int) => Int = <function2> scala> val fft = ff.tupled fft: ((Int, Int)) => Int = <function1> 
+54
Jan 01 '09 at 4:20
source share

Following another answer, you can write (verified from 2.11.4):

 scala> def f (i: Int, j: Int) = i + j f: (i: Int, j: Int)Int scala> val ff = f _ ff: (Int, Int) => Int = <function2> scala> val p = (3,4) p: (Int, Int) = (3,4) scala> ff.tupled(p) res0: Int = 7 

See def tupled: ((T1, T2)) โ‡’ R :

Creates a fixed version of this function: instead of 2 arguments, it takes one argument scala.Tuple2 .

+7
Dec 27 '14 at 20:52
source share
 scala> def f (i: Int, j: Int) = i + j f: (i: Int, j: Int)Int scala> val p = (3,4) p: (Int, Int) = (3,4) scala> val ft = (f _).tupled ft: ((Int, Int)) => Int = <function1> scala> ft apply(p) res0: Int = 7 
0
Feb 10 '16 at 22:26
source share



All Articles