我剛剛開始在單聲道中使用F#進行討論,並且出現以下問題,我不太明白。查詢printfn
和TextWriterFormat
的信息也沒有帶來啓發,所以我想我會在這裏問。F#中的printfn類型,靜態與動態字符串
在FSI我運行以下命令:
> "hello";;
val it : string = "hello"
> printfn "hello";;
hello
val it : unit =()
只是一個普通的字符串,並打印出來。精細。現在,我想聲明一個變量來包含相同的字符串,並打印,以及:
> 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
失敗..這當然不適用於動態字符串,但我認爲這只是編譯器方便靜態的情況。