2016-11-29 86 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