scala enumeration

Anulación del valor de enumeración de Scala



enumeration (3)

Aquí hay otro enfoque más simple:

scala> :paste // Entering paste mode (ctrl-D to finish) object Colors extends Enumeration { sealed case class Color private[Colors](hexCode: String, name: String) extends Val(name) val Black = Color("#000000", "black") val White = Color("#FFFFFF", "white") } // Exiting paste mode, now interpreting. defined object Colors scala> Colors.Black.hexCode res0: String = #000000 scala> Colors.Black.name res1: String = black scala> Colors.values res2: Colors.ValueSet = Colors.ValueSet(black, white) scala>

Por lo que puedo decir, Scala tiene definiciones para la clase de Valor de enumeración para Valor (Int), Valor (Cadena) y Valor (Int, Cadena).

¿Alguien sabe de un ejemplo para crear una nueva subclase de valor para admitir un constructor diferente?

Por ejemplo, si quiero crear una enumeración con objetos de valor (Int, String, String), ¿cómo lo haría? Me gustaría todos los otros beneficios de usar la clase Enumeration.

Gracias.


En realidad, en Scala Enumeration tiene un significado mucho más simple que en Java. Para su propósito, no tiene que subclasificar la enumeración ni su valor de ninguna manera, solo necesita crear una instancia de su propio tipo en su objeto complementario como un val . De esta forma obtendrás el modelo de acceso familiar de val value:MyEnum = MyEnum.Value como lo tenías en Java, que no es posible en el ejemplo proporcionado por Thomas Jung. Allí tendrá el def value:My.MyVal = MyEnum.Value que es un tanto confuso, ya que me parece además de todo el hackiness de la solución. Aquí hay un ejemplo de lo que propongo:

class MyEnum(myParam:String) object MyEnum { val Value1 = new MyEnum("any parameters you want") val Value2 = new MyEnum("") object Value3 extends MyEnum("A different approach to instantialization which also lets you extend the type in place") }

Aquí encontrará un ejemplo más complicado: Mejores prácticas de Scala: herencia de rasgo frente a enumeración


Los valores de Enumeration son instancia de la clase Val. Esta clase se puede extender y se puede agregar un método de fábrica.

object My extends Enumeration { val A = Value("name", "x") val B = Value("other", "y") class MyVal(name: String, val x : String) extends Val(nextId, name) protected final def Value(name: String, x : String): MyVal = new MyVal(name, x) } scala> My.B.id res0: Int = 1 scala> My.B.x res1: String = y