2010-02-19 9 views
10

हास्केल में टाइपिंग परिभाषा में deriving Show जोड़कर एक बीजगणितीय प्रकार/भेदभाव संघ "प्रदर्शित करने योग्य" बनाना आसान है।एफ # में हास्केल का "व्युत्पन्न शो"?

एफ # में मैं अंत तरह बातें लिख:

type Pos = 
    | Pos of int * int 
    override this.ToString() = 
     match this with 
     Pos(startp, endp) -> sprintf "Pos(%d, %d)" startp endp 

और स्पष्ट रूप से यह और अधिक जटिल प्रकार के साथ बहुत खराब हो जाता है।

F # में deriving Show जैसे कुछ पाने के लिए कोई तरीका? इस तरह के printf रूप

+0

एर, एफ # पहले से ही आपके लिए यह करता है इसलिए आपको 'व्युत्पन्न शो' लिखना नहीं है। –

उत्तर

20

एफ # मुद्रण कार्यों अगर आप %A फॉर्मेट स्पेसिफायर (वे ToString उपयोग करें यदि आप %O उल्लेख करें) का उपयोग यथोचित किसी भी डेटा प्रकार स्वरूपित करने के लिए सक्षम हैं। आप ToStringsprintf जो स्वरूपित स्ट्रिंग रिटर्न का उपयोग कर लागू कर सकते हैं:

type Pos = 
    | Pos of int * int 
    override x.ToString() = sprintf "%A" x 

यह उदाहरण के लिए प्रिंट में "स्था (1, 2)" और यह एफ # प्रकार (सूचियों, यूनियनों, रिकॉर्ड, tuples) के अधिकांश के लिए काम करता है। यह deriving Show जोड़ने से थोड़ा लंबा है लेकिन कम से कम आपको खुद को प्रिंटिंग को लागू करने की आवश्यकता नहीं है।

+2

और एफ # में 'व्युत्पन्न पढ़ने' कैसे प्राप्त कर सकता है? –

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