OCaml

2010-10-26 13 views
7

में फ़ील्ड की प्रतिलिपि बनाना मेरे पास ओकैमल रिकॉर्ड के संबंध में एक बहुत ही बुनियादी सवाल है। मान लीजिए मैं एक रिकॉर्ड परिभाषित किया गया है:OCaml

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

अब, मैं जो बराबर x सभी क्षेत्रों है एक नई रिकॉर्ड बनाने के लिए चाहते हैं, लेकिन जो ग = 4 है लगता है। मैं लिख सकता था:

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

लेकिन यह परेशान है क्योंकि एक = 3 और बी = 8 को फिर से लिखने की आवश्यकता नहीं है। मैं यह भी लिख सकता था:

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

लेकिन रिकॉर्ड में कई फ़ील्ड हैं, लेकिन यह अभी भी अच्छा नहीं है। क्या कुछ लिखने का कोई तरीका है:

let y = {x with c=4} 

या इस तरह का कुछ?

किसी भी मदद के लिए बहुत बहुत धन्यवाद।

सभी बेहतरीन, सुरिकेटर।

उत्तर

15

हाँ, और यह सटीक वाक्यविन्यास है।

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

लॉल ... इसके बारे में कैसे ?! उत्तम सामग्री। धन्यवाद! – Surikator

+0

हाँ, आपके पास बहुत प्रभावशाली अंतर्ज्ञान है। – nlucaroni

+1

किसी दिए गए प्रकार की परिभाषा के लिए, '{x with c = 4}' '{a = x.a; b = x.b; c = 4}' के बराबर है। हालांकि, यदि आप किसी फ़ील्ड को जोड़ने या निकालने के लिए रिकॉर्ड प्रकार बदलते हैं, तो कंपाइलर आपको पूर्व के बारे में चेतावनी नहीं देगा, जो कि आप वही चाहते हैं जो आप चाहते हैं या नहीं चाहते हैं। इस प्रकार आपको दो नोटेशन के बीच चयन करना चाहिए। –