codeschool의 루비 비트 코스에서 나는이 클래스들이 어떻게 작동하는지 이해하려고 노력하고있다. 나는 Game
클래스와 게임 컬렉션을 저장하는 Library
이라는 콜렉션 클래스를 가지고있다.왜 내 루비 메서드가 항상 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
라이브러리 클래스 :
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)
을
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
가 지금은 어떤 게임을 만들 특정 게임은에 있습니다.210 has_game?
메서드를 사용하면 컬렉션의 일부로 삽입 된 적이 없지만 항상 true
puts myCollection.has_game?(contra) #=> returns **true**
이 표시됩니다.
내가 뭘 잘못하고 있니?
'때문에 game == game'은 항상 사실입니다. – melpomene
Game 클래스의'== (games)'인스턴스 메소드가 문제입니까? 이 문제를 어떻게 해결할 수 있습니까? 게임이 콜렉션의 일부인지 아닌지 확인해야합니다. –
아니요, 문제는 게임 자체를 게임과 비교한다는 것입니다. – melpomene