2014-10-10 119 views
-1

我是Ruby的新手,并试图创建一个类似Zork的小游戏。我在与下面的代码行麻烦:if语句也使用.include?和&&在ruby

puts "Do an action" 
action = gets.chomp 

if action.include? 'look' && 'bed' 
puts "you look at the bed" 
elsif action.include? 'pickup' && 'bed' 
puts "you pickup the bed" 
else 
puts "you do nothing" 
end 

出于某种原因,当我第一次单独在一个新的文件,将工作键入此。如果我改变了代码,它只会给我第一个投入。

+3

你能详细说明什么是/不工作?添加输入,预期行为和实际行为将会很有帮助。 – Max 2014-10-10 14:44:19

+1

如果您需要检查数组中多个值的成员关系,则需要像'action.include?('look')&& action.include?('bed')'或者'smarter'['look' “床”。所有? {| O | action.include? o}'或者更邪恶的'''''看','床']。 &action.method(:include?)' – 2014-10-10 14:53:47

回答

0

你可以猴子补丁String做这样的事情

class String 
    def include_all?(*args) 
    args.map{|arg| self.include?(arg)}.reduce(:&) 
    end 
end 

然后调用像

action = "look a dog bed for sale" 
action.include_all?("look","bed") 
#=> true 
action.include_all?("look","bed","fish") 
#=> false 

这样做是为你提供它需要尽可能多的参数,并使用它们放入一个Array splat *然后检查以确定每个包含在String中。然后,它降低了他们使用&运营商的单一值,使之转化为

action = "look a dog bed for sale" 
action.include_all?("look","bed") 
    #args = ["look","bed"] 
    #args.map{|arg| action.include?(arg)} 
    #=> [true,true] 
    #true & true 
    #=> true 
action.include_all?("look","bed", "fish") 
    #args = ["look","bed","fish"] 
    #args.map{|arg| action.include?(arg)} 
    #=> [true,true,false] 
    #true & true & false 
    #=> false 

其他建议是更加标准程序。我只想指出新的红宝石主义者,改变一个阶级是一个相当简单的过程。使用你自己的风险

+0

eww。只是ewww。我们不建议给刚开始使用红宝石的人修补猴子。 – DGM 2014-10-10 15:40:39