Für welchen Zweck gibt es $ Deferr, $ defout und warum gibt es kein $ defining wenn es $ stderr, $ stdout und $ stdin, und auch STDIN, STDOUT und STDERR
ändern einer von ihnen nicht andere ändern
Für welchen Zweck gibt es $ Deferr, $ defout und warum gibt es kein $ defining wenn es $ stderr, $ stdout und $ stdin, und auch STDIN, STDOUT und STDERR
ändern einer von ihnen nicht andere ändern
STDIN, STDOUT und STDERR sind globale Strom Konstanten (dh Standardwerte).
$ stdin, $ stdout und $ stderr sind globale Variablen, die auf den Wert der Stromkonstanten initialisiert werden. Dadurch können Sie ihre Werte zur Laufzeit ändern (z. B. um stdout in ein alternatives Ausgabegerät zu ändern).
$ defout ist eine Möglichkeit, einen 'In-Place'-Ausgabestrom zu erstellen. Es gibt eine kurze Diskussion über die Ruby-Mailingliste hier:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/67822
Natürlich kann man nicht einen direkten Eingangsstrom hat, so gibt es kein ‚$ defin‘.
Jedoch, dies ist hauptsächlich für historisches Interesse; Ich glaube, dass $ defout und $ deferr vor einiger Zeit mit der Veröffentlichung von Ruby 1.8.2 veraltet waren, und die beste Vorgehensweise ist, nur $ stdin, $ stdout und $ stderr zu verwenden.
Wenn ich Linien von Ruby-Talk-Seite aus, sondern etwas mehr Ruby-Code
ruby -p -i.bak -e 'STDERR.puts $stdout, $defout, $stderr, $deferr; $_.upcase!' junk
, dann sehe ich, dass $ stdout ist gleich $ defout und $ stderr ist gleich $ Deferr hinzuzufügen. Auch wenn ichruby -e '$stdout = File.open("junk", "w"); print "output"'
ausführen, dann Zeichenfolge "Ausgabe" wird in der Datei Junk sein. Kann ich annehmen, dass es besser ist, nur $ defout und $ deferr zu vergessen, da sie veraltet sind? – tigJa - das würde ich machen. Fühlen Sie sich frei, diese Antwort zu akzeptieren (ankreuzen), wenn es hilfreich ist! –