2009-07-27 4 views
1

$ stderr、$ stdout、$ stdinがある場合、$ deferr、$ defout、なぜ$ definderがないのかまた、それらのいずれかを変更するSTDIN、STDOUTおよびSTDERR

は他人を変更しません

答えて

7

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の廃止になったと思います。

+0

私はルビートークページから行を実行しますが、 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

+0

ええ、それは私がやることです。役に立つと思うなら、この答えを受け入れるように気をつけてください! –

関連する問題