ちょっと前の Ruby-dev office hour で STDOUT と $stdout について話題になってたので書いてみる。 発端は Ractor で $stdout は使えるけど STDOUT は使えないというものだったようだけど、まあ Ractor についてはよくわからないんで置いておく。 Ruby には標準入出力エラー出力を表すものとして、定数(STDIN, STDOUT, STDERR)とグローバル変数($stdin, $stdout, $stderr)がある。 以下で STDOUT / $stdout と書いてるけど、STDIN / $stdin, STDERR / $stderr でも同じ。 Ruby プロセス起動直後は同じオブジェクトを指している。 STDOUT.__id__ # => 7984 $stdout.__id__ # => 7984 $stdout は変数
