困惑した
let test = "aString"
let callMe =
printfn test
なぜこれが機能しないのですか?コンパイル時に以下のエラーをスローします:
タイプ 'string'はタイプ 'Printf.TextWriterFormat <' a> 'と互換性がありません
これはうまくいきます:
printfn "aString"
これは、format
パラメータが実際にはstring
ではないためです。これは_TextWriterFormat<'T>
_であり、F#コンパイラは文字列形式をその型に変換します。ただし、コンパイラは実行時にstring
を_TextWriterFormat<'T>
_に変換できないため、string
変数では機能しません。
変数の内容を出力する場合は、このようにprintfn
を使用しないでください。変数にフォーマット指定が含まれている可能性があるためです。
_%s
_形式を使用できます。
_printfn "%s" test
_
または、.Net Console.WriteLine()
を使用します。
_Console.WriteLine test
_
Console
クラスを使用する場合は、ファイルの先頭に_open System
_を追加することを忘れないでください。
svick が言ったことと同じように、これを試すこともできます。
let test = "aString"
let callMe = printfn (Printf.TextWriterFormat<_> test)
callMe