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