從codechool的ruby-bits課程,我試圖瞭解這些類是如何工作的 - 我有一個Game
類和一個名爲Library
的集合類,用於存儲一系列遊戲。爲什麼我的ruby方法總是返回true?
class Game
attr_accessor :name, :year, :system
attr_reader :created_at
def initialize(name, options={})
self.name = name
self.year = options[:year]
self.system = options[:system]
@created_at = Time.now
end
def ==(game)
name == game.name &&
system == game.system &&
year == game.year
end
end
圖書館類:
class Library
attr_accessor :games
def initialize(*games)
self.games = games
end
def has_game?(*games)
for game in self.games
return true if game == game
end
false
end
end
現在我創造一些遊戲:
contra = Game.new('Contra', {
year: 1994,
system: 'nintendo'
})
mario = Game.new('Mario', {
year: 1996,
system: 'SNES'
})
sonic = Game.new('Sonic', {
year: 1993,
system: 'SEGA'
})
和實例化一個新的集合:
myCollection = Library.new(mario, sonic)
當我試圖找到,如果某些遊戲在使用has_game?
方法210,我總是儘管這從未被插入作爲集合的一部分true
puts myCollection.has_game?(contra) #=> returns **true**
。
我在做什麼錯?
因爲'遊戲==遊戲「總是如此。 – melpomene
那麼Game類中的==(遊戲)'實例方法就是這個問題?我該如何解決?我需要檢查遊戲是否爲集合的一部分 –
不,問題在於您將「遊戲」與自己進行比較。 – melpomene