En Mercurio puedo usar:¿Scala tiene una sintaxis de actualización de registros para hacer clones modificados de estructuras de datos inmutables?
A = B^some_field := SomeValue
para unirse A a una copia de B, excepto que some_field
es SomeValue
en lugar de lo que fuera en B. Creo que el equivalente Haskell es algo así como:
a = b { some_field = some_value }
Scala tiene algo como esto para "modificar" valores inmutables. La alternativa parece ser tener un constructor que establezca directamente cada campo en la instancia, lo que no siempre es ideal (si hay invariantes que el constructor debería mantener). Además, sería muy complicado y mucho más frágil si tuviera que pasar explícitamente cualquier otro valor en la instancia de la que quiero tener una copia modificada.
No pude encontrar nada al respecto mediante googlear, o en una breve encuesta del manual de referencia del idioma o "Scala By Example" (que he leído de principio a fin, pero aún no he asimilado , así que bien puede estar allí).
puedo ver que esta característica podría tener algunas interacciones extrañas con protección de acceso al estilo de Java y subclases aunque ...
¿No son las clases de casos lo que estás buscando? http://daily-scala.blogspot.com/2010/01/case-classes-in-28.html –
Vea también http://stackoverflow.com/questions/3900307/cleaner-way-to-update-nested- estructuras –