Dans quel but y at-il $ deferr, $ defout et pourquoi il n'y a pas $ defin s'il y a $ stderr, $ stdout et $ stdin, et aussi STDIN, STDOUT et STDERR
changer aucun d'entre eux ne changera pas d'autres
Dans quel but y at-il $ deferr, $ defout et pourquoi il n'y a pas $ defin s'il y a $ stderr, $ stdout et $ stdin, et aussi STDIN, STDOUT et STDERR
changer aucun d'entre eux ne changera pas d'autres
STDIN, STDOUT et STDERR sont des constantes de flux globaux (par exemple les valeurs par défaut). $ Stdin, $ stdout et $ stderr sont des variables globales initialisées à la valeur des constantes du flux. Cela vous permet de modifier leurs valeurs au moment de l'exécution (par exemple, pour modifier la sortie stdout vers un autre périphérique de sortie).
$ defout est un moyen de créer un flux de sortie "in-situ". Il y a une brève discussion sur la liste de diffusion rubis ici:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/67822
vous ne peut évidemment pas avoir un flux d'entrée en place, donc il n'y a pas de « $ Defin ».
Cependant, ceci est principalement pour l'intérêt historique; Je crois que $ defout et $ deferr ont été dépréciés il y a quelque temps avec la sortie de Ruby 1.8.2, et la meilleure pratique actuelle est d'utiliser seulement $ stdin, $ stdout et $ stderr.
Si j'exécute des lignes de la page ruby-talk, mais ajouter un code plus ruby
ruby -p -i.bak -e 'STDERR.puts $stdout, $defout, $stderr, $deferr; $_.upcase!' junk
, alors je vois que stdout $ est égal à $ defout et stderr $ est égal à Deferr $. Aussi, si j'exécuteruby -e '$stdout = File.open("junk", "w"); print "output"'
, alors la chaîne « sortie » sera en indésirable de fichiers. Puis-je supposer qu'il vaut mieux oublier $ defout et $ deferr car ils sont dépréciés? – tigOui, c'est ce que je ferais. N'hésitez pas à accepter (cocher) cette réponse si cela vous est utile! –