2012-03-28 23 views
9

एक एफ # इंटरएक्टिव शैल (FSI), अनुमानित अभिव्यक्ति प्रकार (signature) का उपयोग करता है अपने मूल्य के साथ कंसोल के लिए मुद्रित किया जाता है:अपने स्वयं के कोड में एफएसआई के समान एफ # प्रकार हस्ताक्षर कैसे उत्पन्न करें?

val it : int * string * float = (42, "Hello F#", 42.0) 

मैं अपने खुद के कोड, जैसे में एक ही व्यवहार कैसे mimick कर सकते हैं एफ # अभिव्यक्ति के लिए अनुमानित प्रकारों को स्ट्रिंग के रूप में प्राप्त करने के लिए?

मुझे गतिशील रूप से किसी भी F # अभिव्यक्तियों का मूल्यांकन करने की आवश्यकता नहीं है, अभिव्यक्ति संकलित समय में ज्ञात हैं और मेरे (स्थिर) F # कोड का हिस्सा हैं। मुझे इस सुविधा की आवश्यकता है कि मेरे एफ # डेमो के लिए LINQPad में FSI आउटपुट की नकल करने में सक्षम हो।

+0

भाव आगे के- समय में जाना जाता है, तो उन्हें क्यों FSI के माध्यम से आगे-ऑफ-समय के साथ-साथ नहीं चल? – pblasucci

+0

@pblasucci मैं लाइव कोडिंग के लिए लिंककैड का उपयोग करता हूं और यह F # के साथ पूरी तरह से अच्छी तरह से काम करता है। प्रत्येक बार जब मुझे अभिव्यक्ति के लिए हस्ताक्षर दिखाने की ज़रूरत होती है तो एफएसआई में स्विच करना बहुत अधिक समय बर्बाद हो जाएगा। लेकिन मैं इसे एक विकल्प के रूप में रखता हूं, धन्यवाद! –

+0

@AlexanderGalkin Can LinqPAD एक शेल कमांड निष्पादित कर सकते हैं? आप fsc कमांड को --sig ध्वज के साथ खोल और चला सकते हैं और उस फ़ाइल को पास कर सकते हैं जिस पर आप वर्तमान में काम कर रहे हैं। –

उत्तर

10

अनुद्धृत

Unquote का उपयोग करते हुए एक प्रकार की एफ # हस्ताक्षर प्राप्त करने के लिए एक सुविधा है। बस नवीनतम रिलीज डाउनलोड करें और LINQPad के माध्यम से Unquote.dll पर एक संदर्भ जोड़ें, तो आप उदा।

enter image description here

आप रुचि रखते हैं, तो आप FSharpNameType विस्तार के कार्यान्वयन के लिए स्रोत कोड पर जा पहुंचा सकते हैं: http://code.google.com/p/unquote/source/browse/tags/2.1.0/Unquote/ExtraReflection.fs#54

FsEye

एक और साफ दृष्टिकोण का उपयोग करना LINQPad के बीटा Custom Visualizer एपीआई का उपयोग करने (FsEye अनुद्धृत रूप में एक ही एफ # प्रकार हस्ताक्षर मुद्रण एल्गोरिथ्म का उपयोग करता) LINQPad में FsEye एम्बेड करने के लिए किया जाएगा। यह भी बहुत आसान है, आपको केवल LINQPad beta डाउनलोड करना है, FsEye.dll की नवीनतम रिलीज से FsEye.dll डाउनलोड करें और संदर्भित करें, फिर आप उदा।

enter image description here

+0

मैं ** उन पर्यावरण मिश्रण डेटा और मेटाडाटा ** ** प्यार करता हूँ। मैं उन दृश्य कार्यों के ठोस परिणाम प्राप्त करने के लिए अभिव्यक्ति प्रतिस्थापन कर रहा हूं, जो हम लिख रहे हैं ... – nicolas

+0

गायब छवियां!कितना निराशाजनक!!! :-) –

+1

मैन्युअल रूप से एक डीएलएल डाउनलोड करने और रीफ्रेश करने की बजाय, चूंकि लिंककैड बीटा nuget संकुल का समर्थन करता है, शायद FsEye dll का एक nuget पैकेज? – jbtule

1

यदि आप एफ # कंपाइलर कोड देखते हैं और देखें कि संकलक द्वारा --sig विकल्प को कैसे संभाला जाता है, तो मुझे लगता है कि आप जो भी खोज रहे हैं उसे प्राप्त करेंगे। --sig विकल्प और हस्ताक्षर के बारे में यहाँ और अधिक:

Signatures (F#)

+0

आपके सुझाव के लिए धन्यवाद - मैंने अपने प्रश्न में हस्ताक्षर जोड़े। कंपाइलर कार्यान्वयन में जाने की कोशिश करना मेरे लिए एक ओवरकिल जैसा लगता है, क्षमा करें। –

+0

क्यों न केवल '--sig' विकल्प का उपयोग करें और डेमो के दौरान हस्ताक्षर फ़ाइल प्रस्तुत करें? –

+0

मैंने सोचा कि वह पूछ रहा था कि यह प्रोग्रामेटिक तरीके से कैसे करें। –