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学习笔记7.Ruby 循环及方法

在 ruby​​ 中编写条件的正确格式,然后使用 HAML 标记内的字符串插值将输出转换为字符串

正弦波转换为方波

尝试使用 Ruby while 循环查找字符串的元音

将字符串转换为双精度,然后将其推送到 While 循环中的向量

在while循环ruby中多次使用数组ELEMENT