Ruby,在 While 循环内,将字符串转换为方法调用
Posted
技术标签:
【中文标题】Ruby,在 While 循环内,将字符串转换为方法调用【英文标题】:Ruby, Within a While Loop, Convert String to Method Call 【发布时间】:2013-06-04 21:39:30 【问题描述】:这存在于一个被调用一次的方法“play”中。进入 while 循环后,您会一直呆在那里,直到退出该过程。现在,我正在尝试使用 case 语句将用户定义的字符串转换为最后传递的变量以调用 next 方法,所有这些都在 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 语句无法识别除最后一个之外的任何选择。
第二个问题:这导致循环结束,跳转到最后调用的方法,然后退出进程。
感谢任何帮助或建议。
【问题讨论】:
【参考方案1】:看看有没有变化
next_action = @start
到:
next_action = @start.chomp
让你更进一步。
【讨论】:
私有方法 `chomp' 调用 :beginning:Symbol (NoMethodError) 看来next_action
不管是什么,都不是字符串,所以可能不等于"instruct","display"等。【参考方案2】:
您应该改用状态机。
见:http://railscasts.com/episodes/392-a-tour-of-state-machines
【讨论】:
这是一个状态机。它只是没有使用现有的 FSM gem。 感谢您确认,克里斯。我对我的代码不是状态机感到有点困惑。以上是关于Ruby,在 While 循环内,将字符串转换为方法调用的主要内容,如果未能解决你的问题,请参考以下文章
在 ruby 中编写条件的正确格式,然后使用 HAML 标记内的字符串插值将输出转换为字符串