2010-10-26 29 views
7

Tôi có một câu hỏi rất cơ bản về hồ sơ OCaml. Giả sử tôi có một kỷ lục được xác định:Sao chép các trường trong OCaml

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

Bây giờ, giả sử tôi muốn tạo ra một mới kỷ lục trong đó có tất cả các lĩnh vực tương đương với x nhưng trong đó có c = 4. Tôi có thể viết:

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

nhưng điều này gây phiền toái vì không cần phải viết lại = 3 và b = 8. Tôi cũng có thể viết:

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

nhưng điều này vẫn không tốt nếu bản ghi có nhiều trường. Có cách viết nào giống như:

let y = {x with c=4} 

hoặc loại gì đó?

Cảm ơn bạn rất nhiều vì đã giúp đỡ.

Tất cả các thiết bị tốt nhất, Thiết bị làm sạch.

Trả lời

15

vâng, và đó là cú pháp chính xác.

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

Lol ... Làm thế nào về điều đó ?! Công cụ tuyệt vời. Cảm ơn! – Surikator

+0

Vâng, trực giác khá ấn tượng bạn có ở đó. – nlucaroni

+1

Đối với định nghĩa kiểu đã cho, '{x với c = 4}' tương đương với '{a = x.a; b = x.b; c = 4}'. Tuy nhiên, nếu bạn thay đổi loại bản ghi để thêm hoặc loại bỏ một trường, trình biên dịch sẽ không cảnh báo bạn về trường trước đó, có thể chính xác là những gì bạn muốn hoặc không phải những gì bạn muốn. Đây là cách bạn nên chọn giữa hai ký hiệu. –

Các vấn đề liên quan