我刚刚开始在单声道中使用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
失败..这当然不适用于动态字符串,但我认为这只是编译器方便静态的情况。