¿Leer la entrada de la consola en Ruby?

115

Quiero escribir un programa A + B simple en ruby, pero no tengo idea de cómo trabajar con la consola.

Sergey
fuente
10
Estoy hablando de Ruby pero no de ROR. No hay información sobre la entrada de la consola.
Sergey

Respuestas:

228

Estas hablando gets?

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

¿Algo como eso?

Actualizar

Kernel.getsintenta leer los parámetros encontrados en ARGVy solo pide la consola si no los ARGVencuentra. Para forzar a leer desde la consola incluso si ARGVno está vacío, useSTDIN.gets

siame
fuente
59
Tengo un conflicto con esta solución: Kernel.getsintente leer los archivos que se encuentran ARGVy solo pregunte a la consola si no los ARGVencuentra. Para forzar a leer desde la consola aunque ARGVno esté vacío use STDIN.gets.
fguillen
3
a.to_iy b.to_ipodría ser mejor
Dorian
está getsbloqueando? Si no es así, ¿hay algún sustituto que esté bloqueando?
noMAD
1
@fguillen esa es una gran respuesta y no debería ocultarse en los comentarios. ¿Podrías quizás darle una respuesta, por favor? ¡Gracias!
Dan Rosenstark
2
@Yar gracias por la sugerencia, agregué una actualización a la respuesta en sí.
fguillen
28

también puede pasar los parámetros a través de la línea de comando. Los argumentos de la línea de comandos se almacenan en la matriz ARGV. entonces ARGV [0] es el primer número y ARGV [1] el segundo número

#!/usr/bin/ruby

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

puts first_number + second_number

y lo llamas así

% ./plus.rb 5 6
==> 11
rik.vanmechelen
fuente
10

Hay muchas formas de recibir comentarios de los usuarios. Personalmente, me gusta usar el método get. Cuando usa get, obtiene la cadena que escribió, y eso incluye la tecla ENTER que presionó para finalizar su entrada.

name = gets
"mukesh\n"

Puede ver esto en irb ; escriba esto y verá el \ n, que es el carácter de “nueva línea” que produce la tecla ENTER: Escriba name = getsy verá algo como "mukesh\n" Puede deshacerse del molesto carácter de nueva línea usando el método chomp .

El método chomp le devuelve la cadena, pero sin la nueva línea de terminación. Hermosa salvadora de vida del método chomp.

name = gets.chomp
"mukesh"

También puede usar el terminal para leer la entrada. ARGV es una constante definida en la clase Object . Es una instancia de la clase Array y tiene acceso a todos los métodos de la matriz. Dado que es una matriz, aunque es una constante, sus elementos se pueden modificar y borrar sin problemas. De forma predeterminada, Ruby captura todos los argumentos de la línea de comandos pasados ​​a un programa de Ruby (divididos por espacios) cuando se invoca el binario de la línea de comandos y los almacena como cadenas en la matriz ARGV .

Cuando se escribe dentro de su programa Ruby, ARGV tomará un comando de línea de comando que se ve así:

test.rb hi my name is mukesh

y crea una matriz que se ve así:

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

Pero, si quiero pasar una entrada limitada, podemos usar algo como esto.

test.rb 12 23

y use esas entradas como esta en su programa:

a = ARGV[0]
b = ARGV[1]
Mukesh Kumar Gupta
fuente
5

si desea mantener los argumentos de Terminal, pruebe el siguiente código:

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

puts "#{A} + #{B} = #{A + B}"
rilutham
fuente
0

Si desea hacer una consola interactiva:

#!/usr/bin/env ruby

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

Uso (suponiendo que coloque el fragmento anterior en el summatorarchivo en el directorio actual):

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

Usar Ctrl + Dpara salir

wik
fuente