मैंने अभी मोनो में एफ # के साथ घूमना शुरू कर दिया और निम्नलिखित समस्या उत्पन्न हुई कि मैं काफी समझ नहीं पा रहा हूं। printfn
और TextWriterFormat
पर जानकारी को देखकर या तो ज्ञान नहीं आया, इसलिए मैंने सोचा कि मैं यहां पूछने जा रहा हूं।एफ # में printfn का प्रकार, स्थिर बनाम गतिशील स्ट्रिंग
> "hello";;
val it : string = "hello"
> printfn "hello";;
hello
val it : unit =()
बस एक सामान्य स्ट्रिंग और यह मुद्रण:
FSI में मैं निम्नलिखित चलाते हैं। ठीक।
> let v = "hello" in printfn v ;;
let v = "hello" in printfn v ;;
---------------------------^
\...\stdin(22,28): error FS0001: The type 'string' is not compatible with the type 'Printf.TextWriterFormat<'a>'
मैं अपने पढ़ने से समझ गया कि printfn
एक निरंतर स्ट्रिंग की आवश्यकता है: अब मैं एक चर घोषणा करते हैं कि एक ही स्ट्रिंग को रोकने के लिए और यह रूप में अच्छी तरह मुद्रित करने के लिए करना चाहता था। मैं यह भी समझता हूं कि मैं इस समस्या को printfn "%s" v
जैसे कुछ के साथ प्राप्त कर सकता हूं।
हालांकि, मैं समझना चाहता हूं कि यहां टाइपिंग के साथ क्या चल रहा है। स्पष्ट रूप से, "hello"
प्रकार string
के साथ-साथ v
है। तब एक प्रकार की समस्या क्यों है? printfn
कुछ खास है? जैसा कि मैं समझता हूं कि संकलक पहले स्ट्रिंग के तर्कों पर पहले से ही टाइप-चेकिंग करता है, जैसे कि printfn "%s" 1
विफल रहता है .. यह निश्चित रूप से गतिशील तारों के साथ काम नहीं कर सकता है, लेकिन मुझे लगता है कि संकलक-पक्ष से केवल एक सुविधा है स्थैतिक मामला