Я новичок в 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")
^
Глупая ошибка, тонкость языка или ошибка компилятора?