這是怎么編譯的:
scala> val x: Vector[Int] = Vector(1,2,3)
val x: Vector[Int] = Vector(1, 2, 3)
scala> x.contains("hello")
val res4: Boolean = false
scala> x.contains(List(Map("anything" -> 3.14)))
val res5: Boolean = false
編輯:
這與另一個問題不同,其中集合的元素型別被推斷(to Any
),而在這里它被顯式設定(to Int
)。
uj5u.com熱心網友回復:
簽名是(在 3.0.0 中;我建議始終在此類問題中包含語言/庫版本,尤其是 Scala)
def contains[A1 >: A](elem: A1): Boolean
這意味著引數型別必須是 的超型別Int
,并且"hello"
被推斷Any
為確實是這樣的超型別。
簽名的原因而不是更多的預期
def contains(elem: A): Boolean
是該簽名不允許Vector
和其他集合是協變的。
具體來說,如果 aVector[Int]
擴展Vector[Any]
,并且您可以呼叫contains(Any)
a Vector[Any]
,則您還必須能夠在 a 上調??用它Vector[Int]
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/318741.html