Copias con cambios en Scala
Horneadas revisadas con copy, que crea un valor nuevo y deja intacto el viejo.
// every case class gets a copy method for immutable updates
case class Firing(kiln: String, cone: Int, hours: Int)
val bisque: Firing = Firing("Anagama", 6, 9)
// name only the fields that change; the rest are carried over
val hotter: Firing = bisque.copy(cone = 10)
// the source value is untouched, which is what makes this safe
val originalCone: Int = bisque.cone
// copies chain, each call producing another independent value
val glaze: Firing = bisque.copy(cone = 10).copy(hours = 14)
// the fields left alone still compare equal to the source
val sameKiln: Boolean = glaze.kiln == bisque.kiln
val differs: Boolean = glaze != bisque
// copy with no arguments carries every field over, so it is equal
val duplicate: Firing = bisque.copy()
val equalPair: Boolean = duplicate == bisque
Cómo funciona
bisque.copy(cone = 10)nombra el único campo que cambia y arrastrakilnyhourssin tocarlos.bisque.conesigue en su valor original, y.copy(cone = 10).copy(hours = 14)encadena dos copias en un valor nuevo.glaze.kiln == bisque.kilnvale en el campo intacto,glaze != bisqueen el todo;copy()daduplicate == bisque.
Palabras clave y builtins usados aquí
caseclassval
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 793
- Tokens
- 114
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 91 segundos.
Paso 2 de 3 en Case classes y enums; paso 17 de 27 en Fundamentos del lenguaje.