scala scala教學 - 如何將函數應用於元組?





scala用途 java比較 (4)


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

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

這應該是一個簡單的。 如何將函數應用於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> f p
: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
       f p
       ^

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!

提前謝謝了。




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



跟進另一個答案,可以寫(用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

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

創建此函數的tupled版本:它接受單個scala.Tuple2參數,而不是2個參數。




這是作為構建工具使用的SBT的一部分。 具體而言,這是一條重要聲明。

百分比符號%實際上是一種用於構建依賴關係的方法。 雙百分號%%注入當前的Scala版本 - 這可以讓你獲得正在運行的scala版本的正確庫。 這是為了避免在更新Scala時必須更改構建文件。

更多信息here





scala