如何在Ruby中将字符串与命令提示符输入进行比较

时间:2012-11-15 23:53:40

标签: ruby string comparison command-prompt

我两天前才开始研究Ruby语言并且很快就知道我对C派生语言的思维过于局限......我正在尝试对字符串进行比较:

def menu_listen
    action = gets
    while !(action.eql?("up")) && !(action.eql?("down")) && !(action.eql?("close")) do
        puts "'#{action}' is not a valid command at this time."
        action = gets
    end
    return action
end

......之前写的是这样的:

def main_listen
    action = gets
    while action != "up" && action != "down" && action != "close" do
        puts "'#{action}' is not a valid command at this time."
        action = gets
    end
    return action
end

我在这个网站上看到thisString.eql?(thatString)与thisString == thatString相同,它看起来是因为它们都不起作用。我在命令提示符下输入的任何输入都没有通过while循环,并在回复时给出了这个:

'down
' is not a valid command at this time.

这是否意味着按下回车键也会在命令提示输入中存储为新行?谁能告诉我如何实现这一点,以便字符串比较正常工作?

3 个答案:

答案 0 :(得分:4)

gets也会接收eol字符,因此请使用gets.chomp仅接收实际字符串。 chomp方法会删除回车符和换行符。

就字符串比较而言,仅仅比较一下您的输入是否存在于预定义字符串数组中而不是链接&&eql?,这是一种更多的红宝石,例如:

while not %w(up down close).include? action do

这比链接更干净,也更容易修改。

答案 1 :(得分:2)

def menu_listen
  until r = (['up', 'down', 'close'] & [t = gets.strip]).first 
    puts "#{t} is not a valid command"
  end
  r
end

答案 2 :(得分:0)

您需要的只是String#chomp方法,它会从字符串末尾删除分隔符。

    def menu_listen
      while 1 do
        action = gets.chomp
        return action if %w(down up close).include? action.downcase
        puts "#{action}' is not a valid command at this time."
      end
    end