我这里有两个循环:
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有关的错误。 如何创建一个可以处理所有变量的方法?
答案 0 :(得分:1)
您可以raise StopIteration
而不是致电break
。但请注意,它们并不等同:
raise StopIteration
跳转使用loop
语句创建的循环。使用while
,for
或each
等方法创建的循环不会处理异常。它有一个动态范围,这意味着它会在调用堆栈上升,直到找到循环(可以在代码中完全不同的位置定义)。break
跳出任何一个街区。它有一个词法范围,这意味着该块必须在代码中包含break
语句。在您的代码中,break
周围没有阻塞(方法不是阻止),这就是您收到错误的原因。