編集:この質問を読まないでください。削除できません。これは壊れたコードに基づいており、ここで学ぶことは (ほとんど) ありません。
Ruby プログラムでコンソール出力をリダイレクトしていますが、完全に動作しますが、気になる点が 1 つあります。
これが私のコードです
capture = StringIO.new
$stdout = capture
puts "Hello World"
capture
オブジェクトを$stdout
に割り当てているように見えます$stdout
が、割り当て後に新しい別のオブジェクトが含まれていますが、少なくともタイプは正しいです。
言い換えると:
$stdout.to_s # => #<IO:0x2584b30>
capture = StringIO.new
$stdout = capture
$stdout.to_s # => #<StringIO:0x4fda948>
capture.to_s # => #<StringIO:0x4e3b220>
その後$stdout.string
に が含まれていますが"Hello World"
、capture.string
空です。
舞台裏で何かが起こっているのでしょうか、それともここで何かが足りないのでしょうか?
編集:これは、特定のバージョンのみに固有のものである可能性があります。Windows 8.1でRuby 2.0.0-p247を使用しています