Si $stdin
est réaffecté, STDIN
n'est pas affectée. De même, $stdin
n'est pas affectée lorsque STDIN
est réaffecté (ce qui est parfaitement possible (bien qu'inutile), mais produira un message d'avertissement). Toutefois, si aucune variable a été réaffectés, ils pointent vers la même IO objet, afin de l'appelant reopen
1 sur l'un affecte les autres.
Toutes les constructions en ruby méthodes d'utilisation $<
(un.k.un. ARGF
) pour lire l'entrée. Si ARGV
est vide, ARGF
lit à partir de $stdin
, donc si vous réaffectez $stdin
, ce qui influera sur le tout intégré dans les méthodes. Si vous réaffectez STDIN
il n'aura aucun effet à moins que certains 3rd party méthode utilise STDIN
.
Dans votre propre code, vous devez utiliser $stdin
pour être compatibles avec le haut-methods2.
1 reopen
est une méthode qui permet de rediriger un IO objet d'un autre cours ou d'un fichier. Cependant, vous ne pouvez pas l'utiliser pour rediriger les e / s d'un StringIO, afin de ne pas éliminer toutes les utilisations cas de réaffectation $stdin
.
2 Vous pouvez bien sûr également utiliser $<
/ARGF
à être encore plus cohérente avec les méthodes intégrées, mais la plupart du temps, vous n'avez pas envie de l' ARGF
problème si vous utilisez explicitement le flux stdin.