Soy nuevo en Scala, y estoy luchando para entender por qué a veces no consigo un error de tipo cuando se suministra el argumento erróneo Set.contains
Scala Set.contains no da tipo esperado error de coincidencia de
aquí está un ejemplo rápido utilizando el 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
¿Por qué no puedo obtener una coincidencia de tipos hay?
Si asigno baz.values.toSet
a otro val
, y llamo contains
en eso, yo hago obtener la comprobación de tipos:
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")
^
error estúpido, la sutileza del lenguaje, o un error del compilador?
Respuesta corta: sutileza idioma (subtipos y la inferencia de tipos) –