2010-10-26 18 views
7

OCaml kayıtları ile ilgili çok basit bir sorum var. Ben tanımlanmış bir kayıt olduğunu varsayalım: ŞimdiOCaml dosyalarında kopyalama alanları

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

, ben x eşit tüm alanları olan bir yeni kaydı oluşturmak istiyorum ama c = 4 olan varsayalım. Ben yazabilirsiniz:

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

ancak = 3 ve b = 8 yeniden yazmaya orada gerek çünkü bu can sıkıcı. Yazabilirim:

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

Ancak, kayıtta birçok alan varsa bu hala iyi değil.

let y = {x with c=4} 

gibi bir şey yazmanın herhangi bir yolu var mı?

Yardımlarınız için çok teşekkürler.

En iyi ürün, Surikator.

cevap

15

Evet, ve bu tam sözdizimi.

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

Lol ... Nasıl olur ?! Harika şeyler. Teşekkürler! – Surikator

+0

Evet, sahip olduğunuz oldukça etkileyici sezgi. – nlucaroni

+1

Belirli bir tür tanımı için, '{x with c = 4}', {a = x.a; b = x.b; c = 4} 'ile eşdeğerdir. Ancak, bir alanı eklemek veya kaldırmak için kayıt türünü değiştirirseniz, derleyici, sizden istediklerinizi isteyip istemediğinizi belirten, ilk hakkında sizi uyarmayacaktır. İki gösterim arasında seçim yapmanız gereken budur. –