¿Cómo puedo usar una declaración de "coincidencia" para identificar el valor de una variable de clase? El siguiente es válida, y no puedo encontrar una variante aceptable - que no sea otra cosa si ... si ... si no ...¿Cómo puedo unir clases en una declaración de "coincidencia" de Scala?
val c: Class[_] = classOf[Int]
val what = c match { case classOf[Int] => "int!"; case classOf[Float] => "float!" }
El compilador se queja: error: not found: type classOf
Y, por supuesto , no puedo usar Class[Int]
debido a que la información se borra tipo: variantes
c match { case Class[Int] => "int!"; case Class[Float] => "float!" }
error: type Class of type Class does not take type parameters.
también he intentado como Int.class
, todo fue en vano. (Y realmente no quiero convertir cadenas: creo que es importante que el compilador tome clases renombradas/movidas).
¿Estoy siendo denso o me he topado con un punto ciego de Scala?
Bueno, las respuestas a continuación son correctas (y gracias por las respuestas!) pero cada vez parece que este * es * una especie de agujero feo en Scala. Las clases son únicas, por lo que no hay ninguna razón por la que deba asignárselas a las variables para que coincidan de manera eficiente, ni recurrir a una serie de ifs en cascada, escritos como guardias o declaraciones separadas. Pero así es, aparentemente. – Tim