Читать ввод с консоли в Ruby?


115

Я хочу написать простую программу A + B на ruby, но понятия не имею, как работать с консолью.


10
Я говорю о Руби, но не о ROR. Там нет ни слова о вводе с консоли.
Сергей

Ответы:


228

Ты о чем gets?

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

Что-то такое?

Обновить

Kernel.getsпытается прочитать найденные параметры ARGVи запрашивает консоль, только если не ARGVнайден. Чтобы заставить читать с консоли, даже если ARGVне пусто, используйтеSTDIN.gets


59
У меня конфликт с этим решением: Kernel.getsпопробуйте прочитать файлы, найденные в, ARGVи запрашивает консоль, только если не ARGVнайдены. Чтобы заставить читать из консоли, даже если ARGVне пусто используйте STDIN.gets.
fguillen

3
a.to_iи b.to_iмогло быть лучше
Дориан

это getsблокировка? Если нет, то есть ли блокирующая замена?
noMAD

1
@fguillen - отличный ответ, и его не следует скрывать в комментариях. Не могли бы вы дать ответ, пожалуйста? Спасибо!
Дэн Розенстарк

2
@Yar спасибо за предложение, я добавил обновление к самому ответу.
fguillen

28

вы также можете передать параметры через командную строку. Аргументы командной строки хранятся в массиве ARGV. поэтому ARGV [0] - это первое число, а ARGV [1] - второе число.

#!/usr/bin/ruby

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

puts first_number + second_number

и вы называете это так

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

10

Есть много способов получить информацию от пользователей. Мне лично нравится использовать метод получения. Когда вы используете get, он получает введенную вами строку , в том числе клавишу ENTER, которую вы нажали для завершения ввода.

name = gets
"mukesh\n"

Вы можете увидеть это в irb ; введите это, и вы увидите \ n, символ «новой строки», который производит клавиша ENTER: Введите name = getsвы увидите что-нибудь вроде « "mukesh\n" Вы можете избавиться от надоедливого символа новой строки, используя метод chomp» .

Метод chomp возвращает строку, но без символа новой строки в конце. Красивый метод перекусить спаситель жизни.

name = gets.chomp
"mukesh"

Вы также можете использовать терминал для чтения ввода. ARGV - это константа, определенная в классе Object . Это экземпляр класса Array и имеет доступ ко всем методам массива. Поскольку это массив, даже если он является константой, его элементы можно без проблем изменять и очищать. По умолчанию Ruby захватывает все аргументы командной строки, передаваемые программе Ruby (разделенные пробелами), когда вызывается двоичный файл командной строки, и сохраняет их в виде строк в массиве ARGV .

При написании внутри вашей программы Ruby ARGV примет команду командной строки, которая выглядит следующим образом:

test.rb hi my name is mukesh

и создайте массив, который выглядит так:

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

Но, если я хочу передать ограниченный ввод, мы можем использовать что-то вроде этого.

test.rb 12 23

и используйте эти входные данные в своей программе:

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

5

если вы хотите сохранить аргументы из Терминала, попробуйте следующий код:

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

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

0

Если вы хотите сделать интерактивную консоль:

#!/usr/bin/env ruby

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

Использование (при условии, что вы поместили приведенный выше фрагмент в summatorфайл в текущем каталоге):

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

Используйте Ctrl + Dдля выхода

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.