Translate

sábado, 27 de agosto de 2022

Enums en Scala 3


Todavia no estoy a full con todos los cambios en scala 3. Pero sin duda algo que me llamaba la atención es que scala 2 no soporte enums. Si necesitabamos algo similar teniamos que hacer lo siguiente: 


object Permissions extends Enumeration {

  val READ, WRITE, EXEC, NONE = Value

}


Pero esto ya no es más así y ahora tenemos enums : 


enum Permissions {

    case READ, WRITE, EXEC

}

Y para utilizarlo hacemos : 


val read: Permissions = Permissions.READ


A la vez podemos utilizar toda la potencia de los enums como en java, por ejemplo tener argumentos : 


enum PermissionsWithBits(bits: Int) {

    case READ extends PermissionsWithBits(4) // binary 100

    case WRITE extends PermissionsWithBits(2) // binary 010

    case EXEC extends PermissionsWithBits(1) // binary 001

    case NONE extends PermissionsWithBits(0)

//Podemos tener metodos : 

   def toHex: String = Integer.toHexString(bits) // the java way of impl

}


Como es de esperar tambien tenemos un conjunto de propiedades que nos brinda el lenguaje, similares a java : 


val indexOfRead = Permissions.READ.ordinal //saber el orden

val allPermissions = Permissions.values // Todos los valores

val readPermission = Permissions.valueOf("READ") //Pasar de string a enum