F#printf字符串

Cod*_*key 34 string printf f#

我很困惑

let test = "aString"

let callMe =
    printfn test
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?在编译时抛出以下错误:

类型'string'与'Printf.TextWriterFormat <'a>'类型不兼容

这很好用:

printfn "aString"
Run Code Online (Sandbox Code Playgroud)

svi*_*ick 52

那是因为format参数实际上不是string.它TextWriterFormat<'T>和F#编译器将字符串格式转换为该类型.但它不工作string的变量,因为编译器不能转换stringTextWriterFormat<'T>在运行时.

如果要打印变量的内容,您甚至不应该尝试使用printfn这种方式,因为变量可能包含格式规范.

您可以使用以下%s格式:

printfn "%s" test
Run Code Online (Sandbox Code Playgroud)

或者使用.Net Console.WriteLine():

Console.WriteLine test
Run Code Online (Sandbox Code Playgroud)

open System如果要使用Console该类,请不要忘记在文件顶部添加.

  • 你也可以做`stdout.WriteLine test`我觉得唯一的好处是它是一个较短的char而且你不需要打开`System` (5认同)
  • 让我想知道为什么不存在没有格式化的*print*函数.我想这很容易定义.让print value = printfn"%s"值 (4认同)