Ruby重试不正确的用户输入

jhkqcmku  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(102)

我需要重试不正确的用户输入,但我的代码不起作用

def parse_param
begin 
  option = gets.chomp
  option = option.to_i
rescue 
  retry if option > 6
end

字符串
我做错什么了?

dffbzjpn

dffbzjpn1#

我做错什么了?
只有在begin块中发生异常时,才会进入rescue部分(参见Exception Handling的文档)。
由于您自己没有引发任何异常,其余代码也没有引发异常,因此不会执行rescue部分。
你可以通过这种方式手动抛出一个异常:(仅用于演示)

def parse_param
  begin 
    option = gets.chomp
    option = option.to_i
    raise if option > 6
    option
  rescue 
    retry
  end
end

字符串
然而,仅仅为了立即挽救它而提出一个例外是过于复杂的。此外,例外应用于例外情况,即您的代码无法正确处理的意外事件,应将其升级到调用方。
对于正常的控制流,您可以使用简单的loop沿着break,例如:

def parse_param
  loop do
    option = gets.chomp.to_i
    break option unless option > 6
  end
end


Ruby还有一个redo语句,可以用来重新运行当前的迭代:(虽然很少见到)

def parse_param
  loop do
    option = gets.chomp.to_i
    redo if option > 6
    break option
  end
end

8yparm6h

8yparm6h2#

answer of Stefan已经解释了当前解决方案不起作用的原因。我只是想增加一个额外的选择。
您可以使用whileuntil来代替使用loop进行循环。

def parse_param
  option = gets.chomp.to_i while !option || option > 6
  option
end

字符串
请注意,我们需要!option作为额外的检查,因为在第一次检查时option的初始值是nil

相关问题