2016-11-17 8 views
5

मैं एक आरपीएल और स्क्रिप्टिंग के रूप में एफ # का उपयोग करने की कोशिश कर रहा हूं जो सी # लाइब्रेरी का उपयोग करता है। जब मैं आरईपीएल में एक वस्तु का मूल्यांकन, यह इसकी आंतरिक संरचना प्रिंट:एफपीएल से प्रिंट करने के लिए कैसे करें

> <expression>;; 
val it: <type> = 
<subtype> {<prop> = <value>; 
      ... 
      <prop> = <value>;} 

तो मैं एक ही अभिव्यक्ति के साथ एक स्क्रिप्ट लिख रहा हूँ और यह एक ही उत्पादन प्रिंट करना चाहते हैं। लेकिन मुझे कोई print फ़ंक्शन नहीं मिल रहा है जो ऐसा करेगा। निकटतम मुझे मिल सकता है printfn "%O" जो ToString() विधि का उपयोग करता है, जो मेरे मामले में परिभाषित नहीं है और केवल ऑब्जेक्ट प्रकार प्रिंट करता है।

यह एक साधारण सवाल प्रतीत होता है लेकिन मुझे यह Google में यहां या कहीं भी नहीं मिला है।

How to generate the F# type signature similar to FSI in my own code? टाइप पर केंद्रित होना प्रतीत होता है, और मुझे मूल रूप से सुंदर मुद्रित मूल्य की आवश्यकता है।

पीएस: ऐसा लगता है कि यह कोड है जो fsi.exe के लिए आंतरिक है। fsi.fs और sformat.fs स्रोत देखें। मैंने प्रतिबिंब के माध्यम से उन्हें आमंत्रित करने की कोशिश की, लेकिन सरल Internal.Utilities.StructuredFormat.any_to_string(value) सिर्फ एक प्रकार मुद्रित किया। अगर कोई जानता है कि इसे सही तरीके से कैसे बुलाया जाए तो अभी भी अच्छा होगा, लेकिन समय के लिए मैंने फैसला किया कि इस पर अधिक प्रयास न करें।

+2

संभावित डुप्लिकेट [अपने कोड में एफएसआई के समान एफ # प्रकार हस्ताक्षर कैसे उत्पन्न करें?] (Http://stackoverflow.com/questions/9908052/how-to-generate-the-f-type-ignature-similar -to-fsi-in-my-own-code) – TheInnerLight

+0

इसके बारे में क्या: http://stackoverflow.com/questions/791706/how-do-i-ustomize-output-of-a-custom-type-using-printf ? –

+0

@ हेल्गे-रीने-यूरोहोम जो ऑब्जेक्ट प्रकार को स्वयं बदलना शामिल करता है; मैं ऐसा नहीं कर सकता क्योंकि यह पुस्तकालय से है। असल में, मुझे आश्चर्य है कि उन्होंने कैसे "दोनों प्रिंट स्टेटमेंट उपज हासिल की: {ए = 5;}" परिणाम वहां; यह वही है जो मुझे – max630

उत्तर

0

मैं सिर्फ एक ही मुद्दा था, लेकिन मेरे मामले में, printfn "%A" (खरोज बार) मैं क्या एफ # इंटरएक्टिव में देखते हैं के रूप में बिल्कुल वैसा ही परिणाम दिया:

सूची के लिए:

> let l = [(2,"a")];; 
val l : (int * string) list = [(2, "a")] 
> printfn "%A" l;; 
[(2, "a")] 

> type R = { A: string; B: int };; 
type R = 
    {A: string; 
    B: int;} 
> let r = { A = "Foo"; B = 1 };; 
val r : R = {A = "Foo"; 
      B = 1;} 
> printfn "%A" r;; 
{A = "Foo"; 
B = 1;} 

एक गैर एफ # डेटाप्रकार के लिए::

> let u = UriBuilder("http", "bar", 80);; 
val u : UriBuilder = http://bar:80/ 
> printfn "%A" u;; 
http://bar:80/ 
एक रिकॉर्ड के लिए
+0

प्रिंट करता है यह ठीक से परिभाषित जैसा दिखता है। ToString विधि। मेरे मामले में कोई नहीं था। आरईपीएल से आउटपुट तब ऑब्जेक्ट आंतरिक प्रिंट करता है। – max630

+0

मुझे लगता है कि मुझे अभी भी आपकी समस्या नहीं मिली है। 'Printfn"% A "' का उपयोग करते समय आपको जो मिलता है उसकी तुलना में, जब आप आरईपीएल में एक अलग आउटपुट प्राप्त करते हैं, तो डेटाटाइप क्या हैं? कुछ सी # कक्षा? –

+0

हां, सी # कक्षा। कुछ पुस्तकालय से जो मेरा नहीं है। मैं उदाहरण प्रदान करने की कोशिश करूंगा क्योंकि मेरे पास समय है, लेकिन जहां तक ​​मुझे याद है कि यह बहुत सरल था। – max630

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