林不解F#的printf字符串
let test = "aString"
let callMe =
printfn test
爲什麼不是這方面的工作?下面拋出錯誤在編譯時:
類型 '串' 不與類型兼容「Printf.TextWriterFormat < '一>'
這工作得很好:
printfn "aString"
林不解F#的printf字符串
let test = "aString"
let callMe =
printfn test
爲什麼不是這方面的工作?下面拋出錯誤在編譯時:
類型 '串' 不與類型兼容「Printf.TextWriterFormat < '一>'
這工作得很好:
printfn "aString"
這是因爲format
參數實際上不是string
。它是TextWriterFormat<'T>
,F#編譯器將字符串格式轉換爲該類型。但它不適用於string
變量,因爲編譯器在運行時無法將string
轉換爲TextWriterFormat<'T>
。
如果您想打印變量的內容,您甚至不應該嘗試以這種方式使用printfn
,因爲變量可能包含格式規範。
您可以使用%s
格式:
printfn "%s" test
或者使用.NET Console.WriteLine()
:
Console.WriteLine test
不要忘了在文件的頂部添加open System
如果你想使用Console
類。
在什麼svick說行,你也可以試試這個:
let test = "aString"
let callMe = printfn (Printf.TextWriterFormat<_> test)
callMe
Nope;價值限制。 – 2018-01-01 06:04:28
我想補充一點,使用'Console.WriteLine'在F#代碼不地道,和'printf'版本是更常見。 – 2012-02-25 05:02:23
如果編譯器將其轉換,我想是啊。 結束與printfn「%s」測試 – CodeMonkey 2012-02-25 19:31:26
你也可以做'stdout.WriteLine測試',我猜測唯一的優點是它是一個字符較短,你不需要打開'系統' – 2012-02-26 05:44:18