2014-10-10 79 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