$ deferr、$ defoutはどのような目的で使用され、$ stderr、$ stdout、$ stdin、およびSTDIN、STDOUT、STDERRがある場合に$definが存在しないのはなぜですか。
それらのいずれかを変更しても、他は変更されません
STDIN、STDOUT、および STDERR は、グローバル ストリーム定数 (つまり、デフォルト値) です。
$stdin、$stdout、および $stderr は、ストリーム定数の値に初期化されるグローバル変数です。これにより、実行時に値を変更できます (たとえば、stdout を別の出力デバイスに変更するなど)。
$defout は、「インプレース」出力ストリームを作成する方法です。ruby メーリングリストで簡単な議論がここにあります:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/67822
明らかに、インプレース入力ストリームを持つことはできないため、「$defin」はありません。
ただし、これは主に歴史的な関心のためです。$defout と $deferr は、Ruby 1.8.2 のリリースとともに廃止されたと思います。現在のベスト プラクティスは、$stdin、$stdout、および $stderr のみを使用することです。