Wenn gets
Aufruf ohne den Strom zu spezifizieren wir den Aufruf Kernel#gets und wenn Strom angegeben wir Aufruf IO#gets
Ich glaube Kernel#gets
umschlingt IO#gets
unter der Haube, aber bevor es muss ein IO-Objekt erstellen, dass Das IO-Objekt wird eine Verkettung aller Befehlszeilenargumente (ARGV) sein (es wird versucht, jeden einzelnen als Datei in der Positionsreihenfolge zu öffnen) und sie lesen daraus. Wenn auf ARGV keine Elemente mehr vorhanden sind, liest es von stdin.
Das kann Verhalten mit diesem einfachen Snippet getestet werden:
while gets
puts $_
end
Wenn ruby myscript.rb
ohne Parameter ausgeführt wird stdin lesen, wenn Parameter angegeben werden es versuchen, wie Dateien zu öffnen und daraus lesen, wird es funktioniert ähnlich wie cat
Befehl.
Dass Strom tty sein könnte, socket, Datei etc:
stream = File.open('/etc/passwd','r')
puts stream.gets
stream.close
Eine einfache http-Client-Sockets:
require 'socket'
s = TCPSocket.new 'icanhazip.com',80
s.puts <<~EOF
GET/HTTP/1.1
Host: icanhazip.com
EOF
while line = s.gets
puts line
end
s.close
More about Kernel#gets here
More about IO#gets
oh Ich finde, dass gets.chomp kann auch funktionieren !! Also, ich kann nicht realisieren, was $ stdin jetzt funktioniert @@ – shinyMao