FSharp.Core.Printf モジュールについてのメモ

メモ。そのうち記事に昇格するかも。

間違っているかもしれないので、質問疑問指摘その他お待ちしております!

msdn

Core.Printf モジュール (F#)

読みにくいので英語のほう読んだほうがいいかもしれない。

printf, printfn

System.Console.Out に書き込む。n がつく場合は書き込み後に改行。

fprintf, fprintfn

引数で渡された System.IO.TextWriter に書き込む。たとえば StreamWriter とか?

eprintf, eprintfn

System.Console.Error に書き込む。

sprintf

文字列返すやつ

bprintf

渡された StringBuilder に書き込む。

failwithf

最後に failwith に渡して例外を投げる。

kが頭文字につく関数とつかない関数

kbprintf と bprintf ってどういう違いがあるのという話。

PrintfEnv.Finalize 実行時に渡された関数を適用する。

k が付かない場合は、だいたいの関数が k*printf に ignore 関数を渡している。

StringFormat

書式を作る的な何か。

let fmt = Printf.StringFormat<string -> int -> string>("こんにちは、%sさん!今年は%d年です。")
sprintf fmt "hoge" 2013 // => "こんにちは、hogeさん!今年は2014年です。"

設定ファイルから読み込んでsprintfに渡すとかできるようになります。

ちなみに、指定した型が間違っていたら実行時に例外を投げます。

BuilderFormat

StringBuilder に渡すための書式なので、返す型は unit。

let builder = StringBuilder()
let fmt = BuilderFormat<string -> unit>("hogeさん、%s!")
bprintf builder fmt "こんにちは"
builder.ToString() // => "hogeさん、こんにちは!"
|> ...

TextWriterFormat

TextWriter に渡すための書式なので、返す型は unit。

let fmt = TextWriterFormat<int list -> unit>("とりあえず中身を見る: %A")
printfn fmt [1;2;3]

%A を含む文字列をFormatに渡したい

前述で書いている通り、渡したいものの型を書いておけばだいたい動くと思われます。

残り

あとでかく