8
我想要寫Tuple2的隱式轉換[A,B]於Seq [C]其中C是超類型A和B. 我的第一次嘗試兩種如下:隱式轉換的Scala中的一個問題2.8
implicit def t2seq[A,B,C](t: (A,B))(implicit env: (A,B) <:< (C,C)): Seq[C] = {
val (a,b) = env(t)
Seq(a,b)
}
但它不工作:
scala> (1,2): Seq[Int]
<console>:7: error: type mismatch;
found : (Int, Int)
required: Seq[Int]
(1,2): Seq[Int]
^
雖然這一個工程:
class Tuple2W[A,B](t: (A,B)) {
def toSeq[C](implicit env: (A,B) <:< (C,C)): Seq[C] = {
val (a,b) = env(t)
Seq(a,b)
}
}
implicit def t2tw[A,B](t: (A,B)): Tuple2W[A,B] = new Tuple2W(t)
使用案例:
scala> (1,2).toSeq
res0: Seq[Int] = List(1, 2)
我不知道爲什麼第一個解決方案沒有按預期工作。 Scala版本2.8.0.r22634-b20100728020027(Java HotSpot TM Client VM,Java 1.6.0_20)。
我認爲'<:<'參數通常被稱爲'ev'(簡稱'證據'),而不是env。 – 2010-08-02 18:34:35