今日は IOBuffer
に使える redirect_stdout
のオーバーロードを作った。取り急ぎ Gist として公開してある。Twitterでも呟いてるけれど。
Julia言語では標準ライブラリに redirect_stdout
という関数が用意されており、これを使うと一時的に標準出力への書き込みを横取りすることができる。ドキュメントの雰囲気的には外部コマンドの出力を取り込んだりすることを想定しているようなのだけれど、この機構は標準出力への書き出しを行うプログラムの単体テストにも使える。つまり、テスト対象の関数を呼び出す間だけ標準出力に書き出されるデータを横取りして String
に格納し、後で期待した内容かどうかを確認する。
が、いざ使おうとしたところマニュアルの情報は不足していて使い方がよく分からなかった。そこでJuliaのソースを読みつつ調べたところ、どうにもメモリー上に確保したバッファへリダイレクトすることはできないように読めた。なので、それをやるオーバーロード関数を作ってみた次第。do
構文を使って、次のような感じで使える。
julia> buf = IOBuffer(); julia> redirect_stdout(buf) do print("Hello, World!") end julia> String(take!(buf)) "Hello, World!"
なんでこの機能、標準で無いんだろうなぁ。