case ステートメントで .include?() を使用できますか?ルビー
概要
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 ステートメントは、navigate と入力したことを検出できません。これを修正する方法はありますか、それとも私が完全に間違っている場合、誰かが私を正しい方向に向けてくれますか?
問題を解決するこの方法を見つけましたが、それは安全で信頼できる方法ですか?
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
解決策
if-elsif ブロックの代わりに case を使用したい場合は、次のように記述できます (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