【发布时间】:2012-03-03 00:49:52
【问题描述】:
我是 Scala 新手,我很难理解为什么在向 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")
^
愚蠢的错误、语言的微妙之处或编译器错误?
【问题讨论】:
-
简答:语言精妙(子类型和类型推断)
标签: scala type-conversion