Ruby,在While循环中,将字符串转换为方法调用

Ruby,在While循环中,将字符串转换为方法调用,ruby,methods,Ruby,Methods,这是在一次调用的方法“play”中存在的。进入while循环后,您将一直停留在那里,直到退出流程。现在,我尝试使用case语句将用户定义的字符串转换为变量,该变量在末尾传递以调用下一个方法,所有这些都在while循环中 def play next_action = @start # comes from an initialize function earlier in script while true case next_action when beginning

这是在一次调用的方法“play”中存在的。进入while循环后,您将一直停留在那里,直到退出流程。现在,我尝试使用case语句将用户定义的字符串转换为变量,该变量在末尾传递以调用下一个方法,所有这些都在while循环中

def play
  next_action = @start # comes from an initialize function earlier in script
  while true
    case next_action
    when beginning
      next_action = beginning
    when "instruct"
      next_action = instructions
    when "display"
      next_action = display_users
    else
      puts "Unknown command."
      next_action = display_users
    end
    puts "\n----------"
    next_action = method(next_action).call
  end
end
第一个问题:case语句无法识别除最后一个选项之外的任何选项

第二个问题:这会导致循环结束,跳到调用的最后一个方法,然后退出流程


非常感谢您的帮助或建议。

您应该使用状态机


请参阅:

您应该改用状态机

请参阅:

查看是否更改

next_action = @start
致:

进一步了解您。

查看是否更改

next_action = @start
致:


这是一个状态机。它只是没有使用现有的FSM宝石。谢谢你的确认,克里斯。我对我的代码不是一个状态机感到非常困惑,这是一个状态机。它只是没有使用现有的FSM宝石。谢谢你的确认,克里斯。对于我的代码如何不是状态机,我感到非常困惑。私有方法'chomp'调用:start:Symbol(NoMethodError)似乎无论
下一个动作是什么,它都不是字符串,因此可能不等于“指令”、“显示”等。私有方法'chomp'调用:start:Symbol(NoMethodError)似乎无论下一个动作是什么,它都不是字符串,因此它可能不等于“指令”、“显示”等。