Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb 発起人。
2008-01-16

[Ruby]$stdout

putsやprintの出力先を状況に応じて変更したい。 $stdoutを変更すれば、出力先を切り替えることができるらしい。

$stdout = STDOUT
puts "hello"    # 標準出力へ
$stdout = File.open("log.txt", "w")
puts "hello"    # ファイルlog.txtへ

とまあ簡単に切り替えられるわけだけど、いちいちグローバル変数を設定するのが嫌な気がするので、次のようなメソッドを定義したのだけど、もっといいが方法あるのだろうか。

def stdout(out)
  tmp = $stdout
  $stdout = out
  yield
  $stdout = tmp
end