需要帮助来了解scala list.contains的工作原理

时间:2015-07-20 21:24:55

标签: scala

为什么会这样:

val map = Map(....)

List(1,2,3,4).contains(map)

List(1,2,3,4).contains("hello")

允许编译。我虽然scala是类型安全的。

1 个答案:

答案 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 >: StringAny >: Int开始,编译器就不会抱怨。同样的情况适用于Map方案。