Leggere l'input dalla console in Ruby?


115

Voglio scrivere un semplice programma A + B in ruby, ma non ho idea di come lavorare con la console.


10
Sto parlando di Ruby ma non di ROR. Non ci sono parole sull'input dalla console.
Sergey

Risposte:


228

Stai parlando gets?

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

Qualcosa del genere?

Aggiornare

Kernel.getscerca di leggere i parametri trovati in ARGVe chiede alla console solo se non ARGVtrovati. Per forzare la lettura da console anche se ARGVnon è vuoto utilizzareSTDIN.gets


59
Ho un conflitto con questa soluzione: Kernel.getsprova a leggere i file trovati in ARGVe chiede solo alla console se non ARGVtrovato. Per forzare la lettura da console anche se ARGVnon è vuoto utilizzare STDIN.gets.
fguillen

3
a.to_ie b.to_ipotrebbe essere migliore
Dorian

sta getsbloccando? In caso contrario, c'è qualche sostituto che sta bloccando?
noMAD

1
@fguillen è un'ottima risposta e non dovrebbe essere nascosta nei commenti. Potresti forse dargli una risposta, per favore? Grazie!
Dan Rosenstark

2
@Yar grazie per il suggerimento, ho aggiunto un aggiornamento alla risposta stessa.
fguillen

28

puoi anche passare i parametri tramite la riga di comando. Gli argomenti della riga di comando sono archivi nell'array ARGV. quindi ARGV [0] è il primo numero e ARGV [1] il secondo numero

#!/usr/bin/ruby

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

puts first_number + second_number

e lo chiami così

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

10

Ci sono molti modi per ricevere input dagli utenti. Personalmente mi piace usare il metodo gets. Quando usi gets, ottiene la stringa che hai digitato e questo include il tasto INVIO che hai premuto per terminare l'input.

name = gets
"mukesh\n"

Puoi vederlo in irb ; digita questo e vedrai \ n, che è il carattere di "nuova riga" prodotto dal tasto INVIO: Digita name = getsvedrai qualcosa come "mukesh\n" Puoi sbarazzarti del fastidioso carattere di nuova riga usando il metodo chomp .

Il metodo chomp ti restituisce la stringa, ma senza la fine riga. Bellissimo metodo chomp salvatore della vita.

name = gets.chomp
"mukesh"

È inoltre possibile utilizzare il terminale per leggere l'ingresso. ARGV è una costante definita nella classe Object . È un'istanza della classe Array e ha accesso a tutti i metodi dell'array. Poiché è un array, anche se è una costante, i suoi elementi possono essere modificati e cancellati senza problemi. Per impostazione predefinita, Ruby cattura tutti gli argomenti della riga di comando passati a un programma Ruby (divisi per spazi) quando viene richiamato il binario della riga di comando e li memorizza come stringhe nell'array ARGV .

Quando scritto all'interno del tuo programma Ruby, ARGV prenderà un comando da riga di comando simile a questo:

test.rb hi my name is mukesh

e crea un array simile a questo:

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

Ma, se voglio passare un input limitato, possiamo usare qualcosa di simile.

test.rb 12 23

e usa questi input in questo modo nel tuo programma:

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

5

se vuoi mantenere gli argomenti da Terminal, prova il seguente codice:

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

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

0

Se vuoi creare una console interattiva:

#!/usr/bin/env ruby

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

Utilizzo (supponendo di aver inserito lo snippet sopra nel summatorfile nella directory corrente):

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

Usa Ctrl + Dper uscire

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.