Tôi vừa bắt đầu đùa giỡn với F # trong Mono và vấn đề sau nảy sinh mà tôi không thể hiểu được. Tìm kiếm thông tin trên printfn
và TextWriterFormat
cũng không mang lại sự giác ngộ, vì vậy tôi nghĩ tôi sẽ hỏi ở đây.Loại printfn trong F #, chuỗi tĩnh và động
Trong FSI tôi chạy như sau:
> "hello";;
val it : string = "hello"
> printfn "hello";;
hello
val it : unit =()
Chỉ cần một chuỗi bình thường và in nó. Khỏe. Bây giờ tôi muốn khai báo một biến để chứa rằng cùng một chuỗi và in nó cũng như:
> 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>'
tôi hiểu từ đọc sách của tôi mà printfn
đòi hỏi một chuỗi liên tục. Tôi cũng hiểu rằng tôi có thể giải quyết vấn đề này với một số thứ như printfn "%s" v
.
Tuy nhiên, tôi muốn hiểu những gì đang xảy ra với việc nhập ở đây. Rõ ràng, "hello"
là loại string
cũng như v
là. Tại sao lại có vấn đề về loại? printfn
có gì đặc biệt không? Khi tôi hiểu nó, trình biên dịch đã thực hiện kiểm tra kiểu trên các đối số của chuỗi đầu tiên, chẳng hạn như printfn "%s" 1
không thành công .. điều này tất nhiên không hoạt động với các chuỗi động, nhưng tôi cho rằng đó là một sự thuận tiện đơn giản từ phía trình biên dịch cho trường hợp tĩnh.