为什么会这样:
val map = Map(....)
List(1,2,3,4).contains(map)
或
List(1,2,3,4).contains("hello")
允许编译。我虽然scala是类型安全的。
答案 0 :(得分:0)
如果我们咨询http://ds.arm.com/ds-5/optimize/streamline-faq/,您会注意到以下方法签名:
def contains[A1 >: A](elem: A1): Boolean
特别感兴趣的是类型参数,[A1 >: A]
如果我们将其分解,我们得到:
A
,列表包含的元素类型A1
,您在List >:
,表示下限的符号这应解释为A1由A限制,因此A1是A类型或更通用类型。有关较低类型边界的详细信息,请参阅scaladocs for List.contains。
您有Int
的列表。您询问该列表是否包含String
。从Any >: String
和Any >: Int
开始,编译器就不会抱怨。同样的情况适用于Map
方案。