2016-11-29 8 views
4

Я начал изучать Ruby. У меня есть небольшой проект по созданию игры и попытался создать функцию, которая получает вход пользователя и обрабатывает соответственно.Могу ли я использовать .include?() В case case? Ruby

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

Используйте регулярное выражение с помощью '[]' -notation, 'scan' или' match'. –

+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