2013-10-05 1 views
-3

Например, в следующем коде, я хотел бы, чтобы цикл до конца, как только условие вычисляется как trueне разбивая до цикла, как только условие выполняется в Рубине

x = "B" 

until x == "A" 
x = gets.chomp 
puts "x is not equal to "A"" 
end 

Таким образом, если пользователь вводит "F" они получают puts, но если они вводят "A", тогда puts не выводится.

+1

Использование 'break'? –

+0

Это просто для учебных целей или есть практическая причина, по которой вы будете использовать эту настройку? –

+0

есть практическая причина, я бы запускал код, который мог бы изменить x на true, и я бы хотел, чтобы он перекрывал весь код до тех пор, пока x = true, а затем перестанет оценивать остальную часть кода. @CharlesCaldwell – JonnyPolo

ответ

1

x = true назначает true к x так until x = true эквивалентно until true.

Итак, замените = с == в следующей строке:

until x = true 

->

until x == true 

Или это никогда не закончится.

ОБНОВЛЕНИЕ

Используйте следующий код:

while true 
    x = gets.chomp 
    break if x == 'A' 
    puts 'x is not equal to "A"' 
end 

или

until (x = gets.chomp) == 'A' 
    puts 'x is not equal to "A"' 
end 
+0

, но как только я запустил этот« a », все равно будет оцениваться как« 2 », а не' 1', как я хочу – JonnyPolo

+0

Возможно, я использовал неправильный пример кода, я не хочу вставлять определенный разрыв в 'до' после того, как я установил' x = true'. Мне нужен цикл, который будет «ломаться» один раз «x = true» независимо от того, где он находится в коде. Является ли 'до' неправильным кодом для этого? @falsetru – JonnyPolo

+0

Ваша первая строка не совсем правильная, так как 'x' действительно сравнивается с' true' (т. е. после того, как она установлена ​​в 'true'). Как насчет, «x = true» присваивает true «x», поэтому «до x = true» эквивалентно «до истины»? –

0

Ключевое слово break будет выходить из цикла.

x = false 
a = 0 
b = 0 

until x # is a boolean already so no need for == true 
    a = 1 
    b = 2 
    # code here that could change state of x 
    break if x # will break from loop if x == anything other than false or nil 
    a = 2 
    b = 1 
end 

Очевидно, что это нехороший код, но есть некоторые полезные понятия, в которых вы могли бы ловить рыбу.

EDIT

В ответ на ваш новый код, это правильное использование для until цикла.

puts "x is not equal to 'A'" until (x = gets.chomp) == "A" 
+0

Я обновил свой код в исходном посте, чтобы уточнить его.Я попробую ваш 'break if', но посмотрю и дайте мне знать, если я делаю правильный цикл, или если я буду делать другое. Спасибо! @charles_caldwell – JonnyPolo

+0

Я думаю, что ваш примерный код в вашем обновленном вопросе должен работать нормально (пока вы начинаете «x» равным чему-то другому, чем «A». Я написал немного более короткую версию. –

+0

Я запустил ваш код, но как только я вхожу '' «Он все еще говорит мне« puts »after и затем заканчивается. Я хочу, чтобы он разбился до' puts' if 'X ==" A "' @ charles-caldwell – JonnyPolo

Смежные вопросы