2016-11-29 147 views
4

我已经开始学习Ruby。我有一个小项目来构建游戏,并试图创建一个接收用户输入并相应处理的函数。我可以在case语句中使用.include?()吗?红宝石

def Game.listener 
    print "> " 

    while listen = $stdin.gets.chomp.downcase 

    case listen 
    when (listen.include?("navigate")) 
     puts "Navigate to #{listen}" 
     break 
    when ($player_items.include?(listen)) 
     Items.use(listen) 
     break 
    end 

    puts "Not a option" 
    print "> " 
    end 
end 

但是,case语句无法检测到我键入了导航。有没有办法解决这个问题,或者如果我完全失去了方向,有人能指出我的方向吗?

我发现这种方式来解决我的问题,这是一种安全可靠的方式?

while listen = $stdin.gets.chomp 
     case listen.include?(listen) 
     when listen.include?("navigate") 
     puts "Navigate to #{listen}" 
     when listen.include?("test") 
     puts "test" 
     when $player_items.include?(listen) 
     puts "Using the #{$player_items[listen]}" 
     break 
     else 
     puts "Not a option" 
     end 
     print "> " 
    end 
+1

使用正则表达式使用'[]' - 注释,'扫描'或'匹配'。 –

+0

@ sagarpandya82谢谢。你能否给我提供一个如何工作的例子?我是这个领域的新手 – MrSlippyFist

+1

'(listen.include?(“navigate”))'equals'true'或'false',所以如果listen等于那个逻辑值,则执行下面的行。这不是你想要的。你需要将'case listen'更改为'case'。 –

回答

4

如果你想使用一个case代替if-elsif块,那么你可以写这样的事情(注意case后的空格):

while listen = $stdin.gets.chomp 
    case 
    when listen.include?('navigate') 
    puts "Navigate to #{listen}" 

    when listen.include?('test') 
    puts 'test' 

    when $player_items.include?(listen) 
    puts "Using the #{$player_items[listen]}" 
    break 

    else 
    puts "Not an option" 
    end 

    print "> " 
end 
0

在你的情况使用if elsif

if listen.include?("navigate") 
    # ... 
elsif $player_items.include?(listen) 
    # ... 
end 
+0

快速反应!这会工作,谢谢。我想知道是否有更清晰的方式,因为游戏将在未来“听取”更多的投入。因此我选择了使用案例 – MrSlippyFist

相关问题