所以我认为这将是非常基本的但是我没有运气找出一个与数组中具有相同属性的对象是否实际上在数组中。以下代码返回false:
hand = [Card.new(:ace)]
puts("#{hand.include?(Card.new(:ace))}")
但是我看不出如何检查手持阵列中的卡是否与我在包含中提供的卡的内容相同?参数。
答案 0 :(得分:1)
假设
class Card
attr_reader :card
def initialize(card)
@card = card
end
end
你可以使用:
hand.find { |c| c.card == :ace }
find
会返回第一个匹配元素或nil
答案 1 :(得分:1)
因此,确保对象平等的正确方法是实施#==
和#hash
class Card
attr_accessor :card
def initialize(card)
@card = card
end
def ==(other)
other.class == self.class && other.card == @card
end
alias_method :eql?, :==
def hash
@card.to_s.hash
end
end
p Card.new(:ace) == Card.new(:ace)
#=> true
答案 2 :(得分:0)
您需要添加一种方法来衡量卡片类卡片之间的相等性。你的班级可能如下所示:
class Card
attr_reader :value
def initialize(v)
@value = v
end
def ==(other_card)
@value == other_card.value
end
end