2012-04-25 34 views
9

क्या ऐसा करने का एक क्लीनर तरीका है? मैं एकओकैमल - एक tuple में सूची संदर्भ के साथ पैटर्न मिलान

(a' option * (char * nodeType) list ref

एक ही रास्ता मैंने पाया की पैटर्न मिलान करने के लिए कोशिश कर रहा हूँ इस कर रहा था:

match a with 
| _, l -> match !l with 
    | (c, n)::t -> doSomething 

वहाँ एक रास्ता मैच के लिए a कुछ के साथ किसी और की तरह नहीं होगा। ..

match a with 
| _, ref (c,n)::t -> doSomething 

... या कुछ समान है? इस उदाहरण में यह सिर्फ एक और मैच करने के लिए भारी नहीं दिखता है, लेकिन वास्तविक मामले में यह कुछ हद तक हो सकता है ...

आपके उत्तरों के लिए धन्यवाद।

type 'a ref = { 
    mutable contents : 'a; 
} 

इसका मतलब यह है कि आप इसके खिलाफ पैटर्न मैच इस तरह रिकॉर्ड सिंटैक्स का उपयोग कर सकते हैं::

match a with 
| _, { contents = (c,n)::t } -> doSomething 

उत्तर

11

ref प्रकार एक परिवर्तनशील क्षेत्र के साथ एक रिकॉर्ड के रूप में परिभाषित किया गया है गुप्त रूप से contents नामक एक परिवर्तनीय क्षेत्र के साथ एक रिकॉर्ड है।

match a with 
| _, { contents = (c, n) :: t } -> (* Do something *) 
+5

(वाह, हम पूरी तरह से सिंक्रनाइज़ हैं।) –