return似乎没有更新它的条件

时间:2014-03-15 12:30:27

标签: ruby return

我正在尝试在继续我的程序之前验证选择,并且尝试按照以下方式执行此操作,如果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

我仍然无处可去。

1 个答案:

答案 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是一个无限循环,它一次又一次地被调用,直到returnbreak被调用。那么现在发生了什么:   - 如果你提供9,它将终止执行   - 如果你提供了错误的参数,它会将消息放在屏幕上并调用redo,这会回到循环的开头   - 如果提供正确的输入,则将调用验证后的代码