gpt4 book ai didi

ruby - 难以解决基本的 RubyMonk 练习

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:35 25 4
gpt4 key购买 nike

在这个页面上: 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)

我希望那里的 Rubyist 可以帮助我解决这个问题。我不确定如何解决它。

谢谢你的帮助

这是测试的输出:

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 ✔

最佳答案

当您重写== 方法时,您应该为您的比较赋予意义。默认的 == 行为检查其他项目是否与比较项目相同(它们具有相同的 object_id)。试试这个:

def ==(other_item)
other_item.is_a?(Item) &&
self.item_name == other_item.item_name &&
self.qty == other_item.qty
end

关于ruby - 难以解决基本的 RubyMonk 练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23640849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com