除了使条件正确之外,您的方法似乎还有递归。我怀疑您的方法如下所示:
def get_input(text, option)
# ...
case option
when 1
# ...
when 2
# ...
when 3
unless condition
puts "That is not a valid choice. Please enter Y or N."
get_input(text, 3) # <- recursion!
end
end
# ...
end
在这里使用循环会更好。像这样的东西:
def get_input(text, option)
# ...
case option
when 3
loop do
valid = case gets.chomp
when /^(y|yes)$/i
puts "positive input"
true
when /^(n|no)$/i
puts "negative input"
true
else
puts "That is not a valid choice. Please enter Y or N."
false
end
break if valid
end
end
end
使用另一个case
语句检查输入。如果输入有效(即y
或n
),true
则返回并break
退出循环,否则false
返回,break
不调用,循环重新开始。
顺便说一句,(y|yes)
匹配y
和yes
,(n|no)
匹配n
和no
,^...$
确保之前或之后没有任何内容,并且i
不区分大小写。
所以/^(n|no)$/i
匹配n
, N
, no
, No
, nO
, 和NO
.