Рубиновый метод чередуется - PullRequest
2 голосов
/ 22 февраля 2012
cool_words = []

while true

    cool_words.push gets
    break if gets.chomp == ''

end

puts cool_words

Это только толчок первой записи, затем третьей и затем пятой. Я думаю, что это то, как я вырываюсь из цикла, потому что без метода break этого не произойдет.

Мне нужно, чтобы break вышло из цикла, когда я нажимаю Enter на пустой строке.

Заранее спасибо!

1 Ответ

5 голосов
/ 22 февраля 2012

Вы звоните gets дважды в цикле.В первый раз он помещается в массив.Второй раз он сравнивается с пустой строкой для разрыва цикла.Но каждый раз он запрашивает новую строку.

Вы хотите вызывать gets только один раз за цикл.Таким образом, вы можете сохранить его в переменной, а затем использовать эту переменную несколько раз позже в коде.

cool_words = []

while true
    line = gets
    cool_words.push line
    break if line.chomp == ''
end

puts cool_words

ОБНОВЛЕНИЕ: @MicahelKohl в комментариях указывает, что вы можете выполнить вышеуказанную задачу более элегантно, как это:

cool_words = []

until (line = gets).to_s.chomp.empty?
    cool_words << line
end

puts cool_words
...