林不解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