如何将函数应用于元组?

这应该是一个容易的。 我如何将函数应用于Scala中的元组? 即:

 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:错误:对象$ iw中的方法f缺less参数;
如果你想把它作为一个部分应用的函数,可以用`_'来实现
        FP
        ^

 scala> f _ p
 :6:错误:值p不是(Int,Int)=> Int的成员
        f _ p
            ^

 scala>(f _)p
 :6:错误:值p不是(Int,Int)=> Int的成员
        (f _)p
              ^

 scala> f(p)
 :7:错误:方法f的参数数量错误:(Int,Int)Int
        F(p)的
        ^

 scala> grr!

提前谢谢了。

在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> 

在斯卡拉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> 

跟在另一个答案,可以写(用2.11.4testing):

 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 

参见def tupled:((T1,T2))⇒R :

创build此函数的元组版本:而不是2个参数,它接受一个单一的scala.Tuple2参数。

 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