3

次のコードは正常にコンパイルされますが、2 番目のコードはコンパイルできませんでした。私の理解では、これら2つの記号はどちらも型制約を意味します。

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

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

1 に答える 1

6

それらは少し異なります。は のサブタイプを<:意味する型制約であり、は同じことを意味する型です。したがって、これは機能します:AB<:<

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

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

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

編集:

1 つの使用例は、1 つの型 param が他の型のサブタイプであることを証明することです。

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)
                 ^
于 2012-12-24T08:55:27.343 に答える