2007.10.13 01:37
ちょっと古いエントリだけど、[ruby-talk]で$stdoutとSTDOUTの関係についての
話があったので、翻訳してみた。
$stdout vs STDOUT
http://blog.segment7.net/articles/2006/08/17/stdout-vs-stdout
翻訳むずい
話があったので、翻訳してみた。
$stdout vs STDOUT
http://blog.segment7.net/articles/2006/08/17/stdout-vs-stdout
標準出力を隠したいとき、$stdoutを使うのとSTDOUTを使うのと二つのやりかたがある。
Rubyが起動するとき、そのプロセスの標準出力ファイルディスクリプタがSTDOUTとグローバル変数$stdoutの両方に格納される。$stdoutは再代入可能なのに対し、STDOUTはそのプロセスの元のstdoutを持ち続ける。Kernel#putsとそれら(pとかprintとか)はwriteするのに$stdoutを使うのであって、STDOUTは使わない。
stdoutをリダイレクトしたいときは、STDOUTをごにょごにょするようなつまんないことをせずに、$stdoutに代入するべし。明示的なファイルディスクリプタに出力するには$stdoutと$stderrを、STDOUTとSTDERRのかわりに使う。
STDOUTはIO#reopenのときにのみ変更できるけど、$stdoutなら#writeがある任意のオブジェクトを代入できる。まさに私のThreadOutのhackのことだね。
翻訳むずい
コメント