Eingaben von der Konsole in Ruby lesen?


115

Ich möchte ein einfaches A + B-Programm in Ruby schreiben, habe aber keine Ahnung, wie ich mit der Konsole arbeiten soll.


10
Ich spreche von Ruby, aber nicht von ROR. Es gibt dort kein Wort über Eingaben von der Konsole.
Sergey

Antworten:


227

Sprechen Sie über gets?

puts "Enter A"
a = gets.chomp
puts "Enter B"
b = gets.chomp
c = a.to_i + b.to_i
puts c

Sowas in der Art?

Aktualisieren

Kernel.getsversucht, die gefundenen Parameter zu lesen ARGVund fragt nur nach einer Konsole, wenn sie nicht ARGVgefunden wird. Um das Lesen von der Konsole zu erzwingen, auch wenn ARGVes nicht leer ist, verwenden SieSTDIN.gets


59
Ich habe einen Konflikt mit dieser Lösung: Kernel.getsVersuchen Sie, die darin gefundenen Dateien zu lesen, und fragen Sie ARGVnur nach einer Konsole, wenn sie nicht ARGVgefunden wird. Um das Lesen von der Konsole zu erzwingen, auch wenn ARGVes nicht leer ist, verwenden Sie STDIN.gets.
Fguillen

3
a.to_iund b.to_ikönnte besser sein
Dorian

ist getsblockiert? Wenn nicht, gibt es einen Ersatz, der blockiert?
noMAD

1
@fguillen das ist eine tolle Antwort und sollte nicht in Kommentaren versteckt werden. Könnten Sie es vielleicht eine Antwort geben, bitte? Vielen Dank!
Dan Rosenstark

2
@Yar danke für den Vorschlag, ich habe der Antwort selbst ein Update hinzugefügt .
Fguillen

28

Sie können die Parameter auch über die Befehlszeile übergeben. Befehlszeilenargumente werden im Array ARGV gespeichert. ARGV [0] ist also die erste Zahl und ARGV [1] die zweite Zahl

#!/usr/bin/ruby

first_number = ARGV[0].to_i
second_number = ARGV[1].to_i

puts first_number + second_number

und du nennst es so

% ./plus.rb 5 6
==> 11

10

Es gibt viele Möglichkeiten, Eingaben von den Benutzern zu erhalten. Ich persönlich mag es, die Methode zu benutzen. Wenn Sie get verwenden, wird die von Ihnen eingegebene Zeichenfolge abgerufen, einschließlich der EINGABETASTE , die Sie gedrückt haben, um Ihre Eingabe zu beenden.

name = gets
"mukesh\n"

Sie können dies in irb sehen ; Geben Sie diese und Sie werden sehen , die \ n, die „Neue - Zeile“ Zeichen ist , dass die ENTER - Taste erzeugt: Geben name = getsSie Somethings sehen , wie "mukesh\n" Sie von lästigen loswerden können Newline Zeichen mit chomp Methode.

Die chomp-Methode gibt Ihnen den String zurück, jedoch ohne den abschließenden Zeilenumbruch. Schöner Lebensretter der Chomp-Methode.

name = gets.chomp
"mukesh"

Sie können das Terminal auch zum Lesen der Eingabe verwenden. ARGV ist eine in der Object- Klasse definierte Konstante . Es ist eine Instanz der Array-Klasse und hat Zugriff auf alle Array-Methoden. Da es sich um ein Array handelt, obwohl es eine Konstante ist, können seine Elemente problemlos geändert und gelöscht werden. Standardmäßig erfasst Ruby alle Befehlszeilenargumente, die beim Aufrufen der Befehlszeilen-Binärdatei an ein Ruby-Programm übergeben werden (durch Leerzeichen getrennt), und speichert sie als Zeichenfolgen im ARGV-Array .

Wenn ARGV in Ihr Ruby-Programm geschrieben wird, übernimmt es einen Befehlszeilenbefehl, der folgendermaßen aussieht:

test.rb hi my name is mukesh

und erstellen Sie ein Array, das folgendermaßen aussieht:

["hi", "my", "name", "is", "mukesh"]

Aber wenn ich begrenzte Eingaben übergeben möchte, können wir so etwas verwenden.

test.rb 12 23

und verwenden Sie diese Eingabe wie folgt in Ihrem Programm:

a = ARGV[0]
b = ARGV[1]

5

Wenn Sie die Argumente von Terminal speichern möchten, versuchen Sie den folgenden Code:

A = ARGV[0].to_i
B = ARGV[1].to_i

puts "#{A} + #{B} = #{A + B}"

0

Wenn Sie eine interaktive Konsole erstellen möchten:

#!/usr/bin/env ruby

require "readline"
addends = []
while addend_string = Readline.readline("> ", true)
  addends << addend_string.to_i
  puts "#{addends.join(' + ')} = #{addends.sum}"
end

Verwendung (vorausgesetzt, Sie haben das obige Snippet in die summatorDatei im aktuellen Verzeichnis eingefügt ):

chmod +x summator
./summator
> 1
1 = 1
> 2
1 + 2 = 3

Verwenden Sie Ctrl + Dzum Beenden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.