Enums en Scala
Un enum de señales cubierto de forma exhaustiva, y otro cuyos casos llevan datos.
// an enum lists a closed set of cases under a single type
enum Signal:
case Clear, Caution, Danger
// values gives every case in declaration order
val allSignals: Array[Signal] = Signal.values
// a match on an enum needs no default: the compiler knows the cases
def speedLimit(signal: Signal): Int = signal match
case Signal.Clear => 70
case Signal.Caution => 30
case Signal.Danger => 0
// a case may take parameters, and the pattern binds them by name
enum Load:
case Crates(count: Int)
case Bulk(tons: Double)
def netKg(load: Load): Double = load match
case Load.Crates(n) => n * 25.0
case Load.Bulk(t) => t * 1000.0
Cómo funciona
enum Signal:concase Clear, Caution, Dangercierra un grupo de tres;Signal.valueslos da en ese orden.signal matchcubre los tres desdeSignal.Clear, sin caso por defecto: el compilador avisa antes de ejecutar.Crates(count: Int)yBulk(tons: Double)toman parámetros, queLoad.Crates(n)vincula por nombre en el patrón.
Palabras clave y builtins usados aquí
casedefenummatchval
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 622
- Tokens
- 105
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 84 segundos.
Paso 3 de 3 en Case classes y enums; paso 18 de 27 en Fundamentos del lenguaje.