$ stderr、$ stdout、$ stdinがある場合、$ deferr、$ defout、なぜ$ definderがないのかまた、それらのいずれかを変更するSTDIN、STDOUTおよびSTDERR
は他人を変更しません
$ stderr、$ stdout、$ stdinがある場合、$ deferr、$ defout、なぜ$ definderがないのかまた、それらのいずれかを変更するSTDIN、STDOUTおよびSTDERR
は他人を変更しません
STDIN、STDOUTとSTDERRは、世界的な流れ定数(すなわちデフォルト値)です。
$ stdin、$ stdout、および$ stderrは、ストリーム定数の値に初期化されたグローバル変数です。これにより、実行時に値を変更することができます(たとえば、stdoutを代替出力デバイスに変更する)。
$ defoutは、インプレース出力ストリームを作成する方法です。明らかに
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/67822
インプレース入力ストリームを持つことができませんので、何も「defin $」が存在しない:ここでルビーメーリングリストの簡単な議論があります。
ですが、これは主に歴史的関心事です。 Ruby 1.8.2のリリースで、$ defdin、$ stdout、および$ stderrだけを使用することが、$ defoutと$ deferrの廃止になったと思います。
私はルビートークページから行を実行しますが、
ruby -p -i.bak -e 'STDERR.puts $stdout, $defout, $stderr, $deferr; $_.upcase!' junk
をいくつかのより多くのルビーのコードを追加した場合、私は、$ stdoutがdefout $に等しいと$ stderrのがdeferr $に等しいことがわかります。また 私はruby -e '$stdout = File.open("junk", "w"); print "output"'
を実行する場合は、 は、文字列「出力は」ファイルジャンクになります。 $ depoutと$ deferrについては忘れてしまいました。 – tigええ、それは私がやることです。役に立つと思うなら、この答えを受け入れるように気をつけてください! –