9 de cada 10 veces, el simple uso de Map
y Set
se comportan como espero que lo haría, pero de vez en cuando estoy inesperadamente golpeado con¿Por qué Map y Set tienen alias en scala.Predef?
error: type mismatch;
[INFO] found : scala.collection.Set[String]
[INFO] required: Set[String]
A modo de ejemplo, a partir de la réplica:
scala> case class Calculator[+T](name: String, parameters: Set[String])
defined class Calculator
scala> val binding=Map.empty[String, String]
binding: scala.collection.immutable.Map[String,String] = Map()
scala> Calculator("Hello",binding.keySet)
<console>:9: error: type mismatch;
found : scala.collection.Set[String]
required: Set[String]
Calculator("Hello",binding.keySet)
^
I Creo que entiendo el error, es decir, la llamada de función en los tipos con alias devuelve los tipos reales.
Y así me parece que la solución es importar los tipos sin alias. Sobre el cual cada otro archivo en mi proyecto ahora generará errores de desajuste de tipo, por lo que tendré que importarlo en cada archivo. Lo que lleva a la pregunta que hago en el título: ¿cuál fue el propósito del alias en Predef, si finalmente necesito importar el paquete real?
¿Está mi entendimiento defectuoso, o mi caso de uso no es el típico, o ambos?
Gracias - Eso tiene sentido ahora que lo miro. Pero supongo que mi pregunta se convierte en '¿Cómo puedo hacer que este código haga lo que quiero con mínimo cruxt?' Si necesito convertir/convertir de un tipo a otro, así como usar nombres completamente calificados para un caso de uso tan simple como el anterior, supongo que debo hacerlo mal. – Jim
Siempre puede llamar a .toSet en cualquier colección para obtener un conjunto inmutable. Puedes o no estar haciendo algo mal: esto es más que nada lo que sucede cuando prefieres la inmutabilidad, pero el mundo entero (incluido tu propio mundo) no te da cosas inmutables. – extempore
por qué inmutable.Map # keySet no devuelve un juego inmutable.Set? – gerferra