2010-10-26 18 views
7

Ho una domanda molto semplice riguardante i record OCaml. Supponiamo che io sono un record definito:Copia di campi in OCaml

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

Ora, supponiamo che io voglio creare un nuovo record diche ha tutti i campi uguali a x ma che ha c = 4. Potrei scrivere:

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

ma questo è fastidioso perché non è necessario riscrivere a = 3 eb = 8. Potrei anche scrivere:

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

ma questo non è ancora buono se il record ha molti campi. C'è un modo di scrivere qualcosa del tipo:

let y = {x with c=4} 

o qualcosa del genere?

Grazie mille per qualsiasi aiuto.

Tutto il meglio, Surikator.

risposta

15

sì, e questa è la sintassi esatta.

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

Lol ... Che ne dici ?! Grandi cose. Grazie! – Surikator

+0

Sì, l'intuizione piuttosto impressionante che hai lì. – nlucaroni

+1

Per una data definizione di tipo, '{x con c = 4}' è equivalente a '{a = x.a; b = x.b; c = 4}'. Tuttavia, se cambi il tipo di record per aggiungere o rimuovere un campo, il compilatore non ti avviserà del primo, che potrebbe essere esattamente quello che vuoi o non quello che vuoi. Questo è il modo in cui dovresti scegliere tra le due notazioni. –