2016-09-05 2 views
1

У меня есть две петель здесь:Используйте перерыв ключевых слов в теле метода

loop do 
    prompt(messages('APR_amt', LANGUAGE)) 
    APR_amt = Kernel.gets.chomp 

    if valid_number?(APR_amt) 
    break 
    else 
    prompt(messages('not_valid_num', LANGUAGE)) 
    end 
end 

loan_duration = '' 
loop do 
    prompt(messages('loan_duration', LANGUAGE)) 
    loan_duration = Kernel.gets().chomp() 

    if valid_number?(loan_duration) 
    break 
    else 
    prompt(messages('not_valid_num', LANGUAGE)) 
    end 
end 

Эта часть продолжает повторять для каждого цикла:

if valid_number?(loan_duration) 
    break 
else 
    prompt(messages('not_valid_num', LANGUAGE)) 
end 

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

def check_number(varname) 
    if valid_number?(varname) 
    break 
    else 
    prompt(messages('not_valid_num', LANGUAGE)) 
    end 
end 

Но это одна не работает. Вместо этого у меня есть ошибка, которая относится к разрыву. Как создать метод, который будет работать со всеми моими переменными?

ответ

1

Вы можете позвонить по телефону break. Но обратите внимание, что они не эквивалентны:

  • raise StopIteration скачки цикла, созданного с помощью loop заявления. Исключением не обрабатываются циклы, созданные с помощью таких операторов, как while, for или методы, такие как each. Он имеет динамический масштаб, что означает, что он поднимается до стека вызовов, пока не найдет цикл (который может быть определен в совершенно другом месте в коде).
  • break выпрыгивает из любого блока. Он имеет лексическую область действия, что означает, что блок должен заключать в коде оператор break. В вашем коде нет блока вокруг break (метод не является блоком), и именно по этой причине вы получили сообщение об ошибке.
Смежные вопросы