我正在尝试在继续我的程序之前验证选择,并且尝试按照以下方式执行此操作,如果select
变量不满足某些条件,则在另一个方法中调用一个方法。
如果select更改为9,我的问题是return if select == 9
似乎没有返回。在重新输入select
方法后,有没有办法重新评估这个?或者我是以错误的方式解决这个问题?
提前致谢
def select (select)
return if select == 9
invalid_select(select) if !valid_select?(select)
puts "And how many would you like?"
# [etc.....]
end
def invalid_select (select)
puts "Please enter a valid select, between 1 and 5. 9 completes your order."
select = gets.chomp.to_i
select (select)
end
修改我已将上述内容更改为:
def select (choice)
return if choice == 9
invalid_selection(choice) if !valid_selection?(choice)
puts "And how many would you like?"
quant = gets.chomp.to_i
# [etc.........]
end
def invalid_selection(choice)
puts "Please enter a valid selection, between 1 and 5. 9 completes your order."
choice = gets.chomp.to_i
return if choice == 9
select (choice)
end
def valid_selection?(choice)
is_a_number?(choice) && choice > 0 && choice < 6 || choice == 9
end
我仍然无处可去。
答案 0 :(得分:0)
您的问题是您以递归方式调用select
方法。所以,如果我提供了错误的输入,你可以在invalid_selection
方法中调用它,然后如果我再次提供错误的输入,你可以在里面再次调用它。所以当我最终提供9作为输入时,最内部的select
调用确实在正确的行上返回,但是我们已经在这个方法的几个调用中,所以我们回到之前的调用并且那里我们在调用invalid_selection
无论如何,示例脚本运行菜单在这里:
def invalid_select?(select)
select <= 0 || select > 10
end
def run_menu
loop do
input = gets.chomp.to_i
return if input == 9
if invalid_select?(input)
print "Please enter a valid select, between 1 and 5. 9 completes your order.\n"
redo
end
end
#here go the correct options
end
run_menu
loop
是一个无限循环,它一次又一次地被调用,直到return
或break
被调用。那么现在发生了什么:
- 如果你提供9,它将终止执行
- 如果你提供了错误的参数,它会将消息放在屏幕上并调用redo
,这会回到循环的开头
- 如果提供正确的输入,则将调用验证后的代码