2015-11-05 68 views
0

最近,我發現了一個代碼片段:這是一個部分應用的功能?

case t @ MethCall(o,m) => ((t -> input)(o)) match { 
    case Some(o @ ObjType(_,_)) => o.retType(m) 
    case _ => None 
} 

我感興趣的是下一個表達式:

(t -> input)(o) 

我知道(t -> input)Tuple2。但是什麼意思調用(o)?我在Tuple2沒有找到這樣的工廠方法。那麼(t -> input)(o)在代碼片段中的含義是什麼?

+1

不知道「MethCall」實際上是什麼。如果它有一個' - >'方法,那麼'(t - > input)'不一定是'Tuple2'。 –

回答

3

在這種情況下,猜測->的含義並不容易。它不一定是在Scala Predef/ArrowAssoc中定義的->。這裏有幾個選擇:

1)它可以在MethCall類中定義爲一種方法:

case class MethCall(v: Int) { def ->(in: String)(other: String) = in + v + other } 
scala> (MethCall(1) -> "input: ")(" ,other") 
res1: String = input: 1 ,other 

2)它也可能是從Tuple2於使用apply/()方法在其上的Function1的隱式轉換:

implicit def tuple2toFunct1[A, B, C](t: Tuple2[A, B]) = (v: C) => identity(v) 
scala> (1 -> 2)("three") 
res1: String = three 

爲了確保您可以檢查IDE/REPL中表達式的類型。

+0

好點。謝謝。 – Finkelson