如何将函数应用于元组?
这应该是一个容易的。 我如何将函数应用于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