** Verwenden Sie "Readline.readline" anstelle von "STDIN.gets" **
STDIN.gets Wenn Sie sich ansehen, wie Sie Standardeingaben in Ruby empfangen, finden Sie häufig die folgenden Implementierungen:
stdin.rb
print '> '
text = STDIN.gets.strip
puts "You said #{text}!"
$ ruby stdin.rb
> hello
You said hello!
Es scheint, dass es zusätzlich zu "bekommen" "read", "readline" und "readlines" gibt. Ich möchte mehrere Zeilen aus der Ruby-Standardeingabe lesen
Mit der obigen Methode können ASCII-Steuerzeichen jedoch nicht mit dem beabsichtigten Verhalten erkannt werden.
$ ruby stdin.rb
> hello^H^H^H
You said he!lo
Im obigen Beispiel wird nach Eingabe von "Hallo" dreimal die Rücktaste des ASCII-Steuerzeichens (die mit "Strg" + "H" eingegeben werden kann) eingegeben.
Eigentlich habe ich nach der Eingabe von "Hallo" dreimal das Steuerzeichen der Rücktaste eingegeben, also möchte ich, dass es "er" ist, aber es wird zu "Hallo ^ H ^ H ^ H" und akzeptiert Standardeingaben. Die Rücktaste wird angewendet, nachdem Sie fertig sind.
Um dies wie beabsichtigt zu tun, implementieren Sie es wie folgt:
readline.rb
require 'readline'
print '> '
text = Readline.readline
puts "You said #{text}!"
$ ruby readline.rb
> he # "hello"Nach Eingabe von Strg+H dreimal gedrückt
You said he!
Readline.readline
ist nützlich, da Sie einen anderen Verlauf verwenden können. Sie können die zuvor eingegebene Zeichenfolge anzeigen, indem Sie die Aufwärts-Taste des Cursors drücken oder "Strg" + "P" drücken. Weitere Informationen finden Sie im Modul Readline-Referenzhandbuch.
Siehe Wikipedia für ASCII-Steuerzeichen.