我两天前才开始研究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.
这是否意味着按下回车键也会在命令提示输入中存储为新行?谁能告诉我如何实现这一点,以便字符串比较正常工作?
答案 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