Читати введення з консолі в Ruby?


115

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


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 - це чудова відповідь, і його не слід ховати в коментарях. Чи не могли б ви зробити це відповіддю? Дякую!
Dan Rosenstark

2
@Я дякую за пропозицію, я додав оновлення до самої відповіді.
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. Під час використання 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

якщо ви хочете зберегти аргументи від Terminal, спробуйте наступний код:

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.