我可以在 case 语句中使用 .include?() 吗? Ruby

Can I use .include?() in a case statement? Ruby

我开始学习了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

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

如果你想使用case而不是if-elsif块,那么你可以这样写(注意case后面的空白space) :

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

试试这个

case listen
when /navigate/
  puts "Navigate to #{listen}"
  break
when (listen if $player_items.include?(listen))
  Items.use(listen)
  break
when "listen is something else"
  puts "do something else"
  break
end