2012-02-25 15 views
23

इमएफ # printf स्ट्रिंग

let test = "aString" 

let callMe = 
    printfn test 

हैरान क्यों इस काम की नहीं है? संकलन समय पर त्रुटि नीचे फेंकता:

प्रकार 'स्ट्रिंग' प्रकार के साथ संगत नहीं है 'Printf.TextWriterFormat <' एक> '

यह ठीक काम करता है:

printfn "aString" 

उत्तर

40

ऐसा इसलिए है क्योंकि format पैरामीटर वास्तव में string नहीं है। यह TextWriterFormat<'T> है और एफ # कंपाइलर स्ट्रिंग प्रारूप को उस प्रकार में परिवर्तित करता है। लेकिन यह string चर पर काम नहीं करता है, क्योंकि संकलक string को TextWriterFormat<'T> रनटाइम पर परिवर्तित नहीं कर सकता है।

यदि आप चर की सामग्री मुद्रित करना चाहते हैं, तो आपको इस तरह printfn का उपयोग करने की कोशिश भी नहीं करनी चाहिए, क्योंकि चर प्रारूप प्रारूप में हो सकता है।

आप %s प्रारूप का उपयोग कर सकते:

printfn "%s" test 

या नेट Console.WriteLine() का उपयोग करें:

Console.WriteLine test 

फ़ाइल के शीर्ष पर open System जोड़ने के लिए यदि आप चाहते हैं मत भूलना Console कक्षा का उपयोग करें।

+0

मैं जोड़ना होगा कि का उपयोग करते हुए 'Console.WriteLine' एफ में # कोड मुहावरेदार नहीं है, और' printf' संस्करण अधिक आम है । –

+1

आह ठीक है अगर संकलक इसे परिवर्तित करता है तो मुझे लगता है। printfn "% s" परीक्षण – CodeMonkey

+5

के साथ समाप्त हुआ आप 'stdout.WriteLine test' भी कर सकते हैं, जहां मुझे लगता है कि एकमात्र लाभ यह है कि यह एक छोटा छोटा है और आपको 'सिस्टम' –

4

क्या svick कहा साथ लाइन में, आप भी इस कोशिश कर सकते हैं:

let test = "aString" 
let callMe = printfn (Printf.TextWriterFormat<_> test) 
callMe 
+0

नहीं; मूल्य प्रतिबंध –