在Scala中,我們可以使用隱含類型類有條件地添加到方法的參數化類型依賴於該類型的參數。例如,Iterator.sum
:添加有效性檢查依賴於一個類型類(可選implicits)
def sum[B >: A](implicit num: Numeric[B]): B = foldLeft(num.zero)(num.plus)
必須有Numeric
類型類此方法的一個實例,甚至被稱爲:
scala> List(1, 2, 3).sum
res0: Int = 6
scala> List("a", "b").sum
<console>:6: error: could not find implicit value for parameter num: Numeric[java.lang.String]
List("a", "b").sum
^
到目前爲止,一切都很好。比方說,我希望有一些集合類型,My2Col
:
class My2Col[A](a1 : A, a2 : A)
但我想強制要求,如果這用A : Numeric
製成,然後a2 > a1
。然而,這是完全有效爲它與A
這不是數字進行。
My2Col("a", "b") //OK
My2Col("b", "a") //OK
My2Col(1, 2) //OK
My2Col(2, 1) //THROW IllegalArgumentException
有沒有人有任何想法可以做到這一點?
PS。如果任何人有一個更好的問題標題任何建議,我所有的耳朵
我不知道如何讓富[T:要求。任何理想? – pedrofurla 2010-12-06 11:30:39
嗯,我不知道,如果可以再訪問`Requirement`對象如果您使用綁定(即`美孚[T:要求]`)上下文來調用它的方法.. – axel22 2010-12-06 12:18:56