在方法体中使用break关键字

时间:2016-09-05 13:35:34

标签: ruby

我这里有两个循环:

snprintf

这部分不断重复每个循环:

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

但是这个没用。相反,我得到了一个与break有关的错误。 如何创建一个可以处理所有变量的方法?

1 个答案:

答案 0 :(得分:1)

您可以raise StopIteration而不是致电break。但请注意,它们并不等同:

  • raise StopIteration跳转使用loop语句创建的循环。使用whileforeach等方法创建的循环不会处理异常。它有一个动态范围,这意味着它会在调用堆栈上升,直到找到循环(可以在代码中完全不同的位置定义)。
  • break跳出任何一个街区。它有一个词法范围,这意味着该块必须在代码中包含break语句。在您的代码中,break周围没有阻塞(方法不是阻止),这就是您收到错误的原因。