2011-08-31 13 views
13

ओकैमल प्रतिकृति ("टोपलवेल") में किसी भी प्रकार, उपयोगकर्ता द्वारा परिभाषित या अन्यथा के लिए समृद्ध प्रिंटिंग है। क्या किसी के अपने स्वयं के सेट के लिए मूल्य प्रिंटर का एक पूरी तरह से कस्टम सेट लिखने के बजाय, इस कार्यक्षमता को अपरिपक्व के बाहर एक्सेस करना संभव है?OCaml मानों को अपूर्ण के बाहर मुद्रित कैसे किया जा सकता है?

उत्तर

11

सुंदर मुद्रण सुविधा अपूर्ण पुस्तकालय का हिस्सा है। आपको toplevel/genprintval.ml में स्रोत मिलेगा। यह समझ में आता है कि इस प्रकार की जानकारी की आवश्यकता है: आप उस पर कोई मूल्य नहीं फेंक सकते हैं, सुंदर प्रिंटर की पसंद इस प्रकार पर आधारित है।

आप अपने प्रोग्राम में इस कोड का उपयोग करना चाहते हैं, तो आप उच्चस्तरीय पुस्तकालय (toplevellib.cma) के साथ लिंक करने के लिए genprintval में संकलन (प्रकार चेकर के लिए पर्याप्त बिट्स में लाने प्रकार का विश्लेषण करने, जिसका अर्थ है, यह कर सकते हैं की जरूरत है या करेंगे बहुत बड़ा हो)।

डीबगर (debugger/printval.ml और debugger/loadprinter.ml) में एक समान सुविधा है (लेकिन मुझे लगता है कि कोड साझा नहीं कर रहा है)।

तीसरे पक्ष के पुस्तकालय हैं जिन्हें आप सीधे लिंक कर सकते हैं और जो सुंदर मुद्रण सुविधाएं प्रदान करते हैं। Extlib का Std.dump एक बहुत ही कच्ची सुविधा प्रदान करता है (प्रकार के आधार पर नहीं)। जेरेमी येलोप और जेक डोनहम द्वारा Deriving एक और दृष्टिकोण है। This Caml Weekly News item अधिक सुझाव प्रदान करता है।

+0

क्या आपको प्रकार का विश्लेषण करने के लिए स्रोत कोड की आवश्यकता नहीं है? – newacct

+1

@ न्यूवाक्ट हां, आपको प्रकार की जानकारी चाहिए, जिसे कंपाइलर द्वारा छोड़ा गया है (लेकिन अपूर्ण या डीबगर के लिए उपलब्ध है)। थर्ड-पार्टी लाइब्रेरी सामान्य प्रकार-निर्भर सुंदर-प्रिंटर लिखने का एक तरीका नहीं, हर प्रकार के लिए एक प्रकार-विशिष्ट सुंदर-प्रिंटर लिखने के हल्के तरीके प्रदान करते हैं। ऐसे भाषा एक्सटेंशन हैं जो जेनेरिकों को अनुमति देते हैं, लेकिन कोई उत्पादन-तैयार कार्यान्वयन AFAIK नहीं है। वर्तमान में, – Gilles

+1

बीटीडब्ल्यू, कम से कम, 'Extlib.Std.dump' और' BatPervasives.dump', @newacct द्वारा उल्लिखित, एक ही कार्य हैं: 'Extlib.Std.dump == BatPervasives.dump ;;' => 'bool = सच'। – Mars

10

ओकैमल बैटरी शामिल पुस्तकालय में इसके BatPervasives मॉड्यूल में dump फ़ंक्शन शामिल है। यह किसी भी मूल्य को एक स्ट्रिंग में परिवर्तित करता है और इसे वापस करता है। आप इसका स्रोत कोड here देख सकते हैं। आउटपुट अपरिवर्तनीय के समान नहीं होगा, क्योंकि रनटाइम पर कुछ जानकारी खो जाती है, उदा। सार डेटा प्रकार कन्स्ट्रक्टर पूर्णांक बन जाएगा।

+0

@MikeSamuel: निश्चित – newacct

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