2010-10-26 13 views
7

Tengo una pregunta muy básica sobre registros OCaml. Supongamos que tengo un registro definido:Copiando campos en OCaml

type r = {a:int;b:int;c:int} 
let x = {a=3;b=8;c=2} 

Ahora, supongamos que desea crear un nuevo registroque tiene todos los campos iguales a x pero que tiene c = 4. Podría escribir:

let y = {a=3;b=8;c=4} 

pero esto es molesto porque no hay necesidad de volver a escribir a = 3 yb = 8. También podría escribir:

let y = {a=x.a;b=x.b;c=4} 

pero esto todavía no es bueno si el registro tiene muchos campos. ¿Hay alguna forma de escribir algo como:

let y = {x with c=4} 

o algo por el estilo?

Muchas gracias por cualquier ayuda.

Todo lo mejor, Surikator.

Respuesta

15

sí, y esa es la sintaxis exacta.

let y = {x with c=4} 
+1

Lol ... ¿Qué tal eso ?! Buena cosa. ¡Gracias! – Surikator

+0

Sí, bastante intuición impresionante que tienes allí. – nlucaroni

+1

Para una definición de tipo dada, '{x con c = 4}' es equivalente a '{a = x.a; b = x.b; c = 4}'. Sin embargo, si cambia el tipo de registro para agregar o eliminar un campo, el compilador no le advertirá sobre el primero, que puede ser exactamente lo que quiere o no lo que quiere. Así es como debes elegir entre las dos notaciones. –