2012-12-24 36 views

回答

6

他們有點不同。 <:是一種類型約束,意思是AB的子類型,而<:<是一種意義相同的類型。因此,這會工作:

class Hello[T <: String](t:T) 

class Hello[T](t: T <:< String) 

替代

class Hello[T](t: <:<[T, String]) 

編輯:

一個用例將證明,一個類型參數是其他的亞型:

def foo[A,B](a: A, b: B)(implicit ev: A <:< B) = "yay" 

scala> foo(Nil, List(1,2,3)) 
res13: java.lang.String = yay 

scala> foo(List(1,2,3), Nil) 
<console>:9: error: Cannot prove that List[Int] <:< scala.collection.immutable.Nil.type. 
       foo(List(1,2,3), Nil) 
       ^
+0

您能否詳細說明一下?我明白<:,但我不明白你的意思是'同一件事'。何時使用<:<與<:<相反? –

+0

已更新我的帖子 – drexin

+0

也許將<:<[A,B]作爲一種類型會更加清楚,其值是證明A是B的子類型的證明。另請參見http://www.scala-lang.org /api/current/scala/Predef$$$less$colon$less.html這是scala中http://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence的小版本。 – aemxdp

相關問題