ちょっと前の 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 は変数
![Ruby の STDOUT と $stdout - tmtms のメモ](https://cdn-ak-scissors.b.st-hatena.com/image/square/fc96c23b8fff03cf9211f8d2672ed537c99ec749/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Ff87359fb1ae22d87dd36281a35a6d4df1ea7fec5%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Ft%252Ftmtms%252F20250202%252F20250202230325.jpg)