Scala Set.contains не выдает ожидаемую ошибку несоответствия типов

Я новичок в 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")
                             ^

Глупая ошибка, тонкость языка или ошибка компилятора?

7
задан mrg 2 March 2012 в 16:23
поделиться