我寫這個例子理解隱含<<參數
class TestMatch[T](private val t: T){
def test()(implicit ev: T <:< Option[Int]) = println(ev(t).get)
}
和測試它
val tm = TestMatch(Some(10))
tm.test() //fine
val tm2 = TestMatch(10)
tm2.test() //compilation error
的問題是誰創造了implicit ev: T <:< Option[Int]
當調用test
方法?我知道我沒有。也許編譯器知道implicit <:<
並知道如何處理它。
的<:<
Documenation不太清楚
要限制任何抽象類型T這是在範圍上的方法的 參數列表(不僅僅是方法本身的類型參數)只需添加 的隱含參數
T <:< U
類型,其中U
是所需 的上限;或下限,請使用:L <:< T
,其中L
是 所需的下限。
這是否意味着,編譯器將採取其他的本身?我只是加了implicit ev: T1 <:< T2
?
基於您已發佈的最近問題,你似乎有你的斯卡拉知識一些明顯的差距。我建議你閱讀一本關於Scala語言和Scala編程的好書。 –