本页内容:https://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/45-more-classes/lessons/105-equality_of_objects
我正试图纠正这段代码,使它通过测试。我的尝试相当糟糕,因为我才刚刚开始学习软件逻辑是如何工作的。
class Item
attr_reader :item_name, :qty
def initialize(item_name, qty)
@item_name = item_name
@qty = qty
end
def to_s
"Item (#{@item_name}, #{@qty})"
end
def ==(other_item)
end
end
p Item.new("abcd",1) == Item.new("abcd",1)
p Item.new("abcd",2) == Item.new("abcd",1)
这是我的解决方案,但它是不正确的:
class Item
attr_reader :item_name, :qty
def initialize(item_name, qty)
@item_name = item_name
@qty = qty
end
def to_s
"Item (#{@item_name}, #{@qty})"
end
def ==(other_item)
if self == other_item
return true
else
return false
end
end
end
p Item.new("abcd",1) == Item.new("abcd",1)
p Item.new("abcd",2) == Item.new("abcd",1)
我希望有一个RubyMaven能帮我解决这个问题。我不知道如何解决它。
谢谢你的帮忙
下面是测试的输出:
STDOUT:
nil
nil
Items with same item name and quantity should be equal
RSpec::Expectations::ExpectationNotMetError
expected Item (abcd, 1) got Item (abcd, 1) (compared using ==) Diff:
Items with same item name but different quantity should not be equal ✔
Items with same same quantity but different item name should not be equal ✔
4条答案
按热度按时间8cdiaqws1#
覆盖
==
方法时,应该为比较给予意义。默认的==
行为检查另一项是否与比较项“相同”(它们具有相同的object_id)。请尝试以下操作:ddarikpa2#
能给你指出正确的方向而不是告诉你答案。
你正在比较对象的引用是否相等,然而,你被要求只比较那些属性是否相等,也就是说,比较两个对象的参数,如果它们相等,它必须返回
true
;否则false
uurv41yg3#
当您向下滚动经过问题时,您将看到下一个示例提供了清晰的解决方案。
fcipmucu4#
类项目属性读取器:项目名称,:数量
结束
pItem.new(“abcd”,1)==新项目(“abcd”,1)p新项目(“abcd”,2)==新项目(“abcd”,1)