typestar

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

  1. bisque.copy(cone = 10) nombra el único campo que cambia y arrastra kiln y hours sin tocarlos.
  2. bisque.cone sigue en su valor original, y .copy(cone = 10).copy(hours = 14) encadena dos copias en un valor nuevo.
  3. glaze.kiln == bisque.kiln vale en el campo intacto, glaze != bisque en el todo; copy() da duplicate == bisque.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 3 en Case classes y enums; paso 17 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →