Unterschied zwischen $ stdout und STDOUT in Ruby
In Ruby, was ist der Unterschied zwischen $stdout
(mit vorangestelltem dollar-Zeichen) und STDOUT
(in all caps)? Wenn dabei die Umlenkung der Ausgabe, die verwendet werden sollten und warum? Das gleiche gilt für $stderr
und STDERR
.
Edit: fand Gerade eine stellt sich die Frage,.
InformationsquelleAutor der Frage jrdioko | 2011-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
$stdout
ist ein Globale variable , stellt die aktuelle standard-Ausgabe.STDOUT
ist ein Konstante Vertretung von standard-Ausgabe und ist in der Regel der default-Wert von$stdout
.Mit
STDOUT
eine Konstante, die sollte man nicht neu definieren, aber Sie können re-definieren$stdout
ohne Fehler/Warnungen (re-definierenSTDOUT
erhöhen wird eine Warnung). zum Beispiel, Sie tun können:Gleiche gilt für
$stderr
undSTDERR
So, zu beantworten, den anderen Teil Ihrer Frage, die in der globalen Variablen umleiten der Ausgabe, nicht die Konstanten. Nur vorsichtig sein, es zu ändern zurück weiter im code, re-Definition globaler Variablen kann Auswirkungen auf andere Teile der Anwendung.
InformationsquelleAutor der Antwort Brian
STDOUT
ist eine Globale Konstante, so sollte es nicht geändert werden.$stdout
ist eine vordefinierte variable, so kann es geändert werden.Wenn Sie mit der shell zu tun Umleitung:
dann ist es egal, welche Sie verwenden, wie der file-Deskriptor für Ihr Skript ermittelt wird, bevor das Skript ausgeführt wird.
Jedoch, wenn Sie versuchen, ändern Sie die Datei-Deskriptor für das OS STDOUT aus Ihrer Ruby-Skript, zum Beispiel zu senden, Ausgabe auf einen rotierenden Satz von log-Dateien, basierend auf den aktuellen Tag der Woche, dann werden Sie wollen, stellen Sie sicher, dass Sie
$stdout
.InformationsquelleAutor der Antwort shakerlxxv
Beide
$stdout
undSTDOUT
verschiedene Bedeutungen haben. Ruby-Dokumentation ist ziemlich klar zu diesem Thema:Wenn Sie schreiben wollen, um die standard-Ausgabe, dann ist Sie eigentlich die aktuellen standard-Ausgabe, so schreiben Sie
$stdout
.STDOUT
ist nicht nutzlos. Es speichert den Standardwert für$stdout
. Wenn Sie jemals zuweisen$stdout
dann können Sie Sie wiederherstellen, um den vorherigen Wert mit$stdout = STDOUT
.Darüber hinaus gibt es eine weitere vordefinierte Variablen:
Aber wie sieht es in Ruby 2.3 es einfach verhält sich wie ein alias für
$stdout
. Neuzuweisen$stdout
ändert sich der Wert der$>
- und Umgekehrt.InformationsquelleAutor der Antwort skalee