2012-09-01 9 views
25

कहो मैं निम्नलिखित एक मामले भेदभाव संघ है:एक मामले पर संक्षिप्त पैटर्न मैच एफ # में संघ भेदभाव

type OrderId = OrderId of string 

कुछ बिंदु पर मैं वास्तविक स्ट्रिंग की जरूरत है। जिस तरह से मैंने इसे निकालने के लिए पाया है वह है:

let id = match orderId with OrderId x -> x 

क्या ऐसा करने का एक और संक्षिप्त तरीका है?

मैं समझता हूँ कि एक विशेष मामला है अपने प्रयोग और मैच के क्रम में बनाने के लिए समझ में आता है सुनिश्चित करें कि आप संभावनाओं को कवर किया गया है, वहाँ की तरह कुछ करने का एक तरीका है कि अगर बस सोच:

let OrderId id = orderId 

उत्तर

37

आप ' लगभग वहाँ फिर से। कोष्ठक क्रम में आवश्यक हैं कि संकलक की व्याख्या एक लेट-बाउंड पैटर्न मिलान को:

let (OrderId id) = orderId 

तो orderId एक समारोह के एक पैरामीटर है, तो आप भी सीधे वहाँ मिलान पैटर्न का उपयोग कर सकते हैं:

let extractId (OrderId id) = id 
18

जब आप एक ही मान (जो एक उपयोगी एफ # प्रोग्रामिंग तकनीक है) धारण करने के लिए एक साथ भेदभाव संघ का उपयोग कर रहे हैं, तो यह समझ बनाने के कर सकते हैं मूल्य पहुँचने के लिए एक संपत्ति के साथ इसे परिभाषित करने की:

type OrderId = 
    | OrderId of string 
    member x.Value = let (OrderId v) = x in v 

Value का कार्यान्वयन पैड द्वारा पोस्ट किए गए let का उपयोग करके पैटर्न मिलान का उपयोग कर रहा है। अब, अगर आप प्रकार OrderId के एक मूल्य orderId है, तो आप सिर्फ लिख सकते हैं:

let id = orderId.Value 

हालांकि, का उपयोग कर (OrderId id) अभी भी काफी उपयोगी है मिलान पैटर्न, क्योंकि संपत्ति का उपयोग केवल काम करेंगे जब संकलक पहले से ही जानता है के प्रकार orderId (इसलिए आप आमतौर पर फ़ंक्शन तर्क में पैटर्न मिलान का उपयोग करेंगे, लेकिन अन्य मानों के लिए संपत्ति का उपयोग)।

संबंधित मुद्दे