我可以在案例陈述中使用 .include?() 吗?红宝石
Posted
技术标签:
【中文标题】我可以在案例陈述中使用 .include?() 吗?红宝石【英文标题】:Can I use .include?() in a case statement? Ruby 【发布时间】:2017-04-13 14:45:42 【问题描述】:我已经开始学习 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
【问题讨论】:
将正则表达式与[]
-notation、scan
或match
结合使用。
@sagarpandya82 谢谢。你能给我一个例子来说明这是如何工作的吗?我是这个领域的新手
(listen.include?("navigate"))
等于true
或false
,因此如果listen
等于该逻辑值,则执行以下行。那不是你想要的。您需要将case listen
更改为case
。
正是我需要的。感谢您的解释。如果您将此作为答案,我可以将您的答案标记为解决方案。
listen
是 String
,listen.include?('navigate')
是布尔值。布尔值永远不会等于String
,也不会匹配String
,因此该分支永远无法执行……对于所有其他分支也是如此。
【参考方案1】:
在你的情况下使用if elsif
if listen.include?("navigate")
# ...
elsif $player_items.include?(listen)
# ...
end
【讨论】:
哇反应快!那会工作的,谢谢。我想知道是否有更清洁的方法,因为游戏将来会“听取”更多的输入。因此我选择用例【参考方案2】:如果你想使用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
【讨论】:
以上是关于我可以在案例陈述中使用 .include?() 吗?红宝石的主要内容,如果未能解决你的问题,请参考以下文章