我是新来斯卡拉,和我挣扎理解为什么我有时提供了错误的参数Set.contains
斯卡拉Set.contains没有给出预期的类型不匹配错误
时没有得到一个类型错误下面是使用REPL(2.9.1.final)一个简单的例子:
scala> val baz = Map("one" -> 1, "two" -> 2)
baz: scala.collection.immutable.Map[java.lang.String,Int] = Map(one -> 1, two -> 2)
scala> baz.values.toSet.contains("asdf")
res3: Boolean = false
为什么我没有得到一个类型不匹配呢?
如果我给你baz.values.toSet
另一个val
,并呼吁该contains
,我做得到的类型检查:
scala> val bling = baz.values.toSet
bling: scala.collection.immutable.Set[Int] = Set(1, 2)
scala> bling.contains("asdf")
<console>:10: error: type mismatch;
found : java.lang.String("asdf")
required: Int
bling.contains("asdf")
^
愚蠢的错误,语言精妙,或编译器错误?
简短的回答:语言微妙(子类型和类型推断) – 2012-03-02 18:46:39