web-dev-qa-db-ja.com

F#printf文字列

困惑した

let test = "aString"

let callMe =
    printfn test

なぜこれが機能しないのですか?コンパイル時に以下のエラーをスローします:

タイプ 'string'はタイプ 'Printf.TextWriterFormat <' a> 'と互換性がありません

これはうまくいきます:

printfn "aString"
38
CodeMonkey

これは、formatパラメータが実際にはstringではないためです。これは_TextWriterFormat<'T>_であり、F#コンパイラは文字列形式をその型に変換します。ただし、コンパイラは実行時にstringを_TextWriterFormat<'T>_に変換できないため、string変数では機能しません。

変数の内容を出力する場合は、このようにprintfnを使用しないでください。変数にフォーマット指定が含まれている可能性があるためです。

_%s_形式を使用できます。

_printfn "%s" test
_

または、.Net Console.WriteLine()を使用します。

_Console.WriteLine test
_

Consoleクラスを使用する場合は、ファイルの先頭に_open System_を追加することを忘れないでください。

57
svick

svick が言ったことと同じように、これを試すこともできます。

let test = "aString"
let callMe = printfn (Printf.TextWriterFormat<_> test)
callMe
4
Shawn Eary