如何在Ruby中删除数组中的类实例?
我试图通过重写抽屉类中的“remove_item”方法来删除@contents数组中的Silverware类。此方法应采用银器@type的名称参数如何在Ruby中删除数组中的类实例?,ruby,arrays,class,Ruby,Arrays,Class,我试图通过重写抽屉类中的“remove_item”方法来删除@contents数组中的Silverware类。此方法应采用银器@type的名称参数 class Drawer attr_reader :contents def initialize @contents = [] end def add_item(item) @contents << item end def remove_item(item = @
class Drawer
attr_reader :contents
def initialize
@contents = []
end
def add_item(item)
@contents << item
end
def remove_item(item = @contents.pop)
@contents.delete(item) # I have to fix this.
end
end
class Silverware
attr_reader :type
def initialize(type, clean = true)
@type = type
end
end
silverware_drawer = Drawer.new # creating new drawer
silverware_drawer.add_item(Silverware.new("spoon")) # adding silverware
p silverware_drawer.contents # I get this >> [#<Silverware:0x007f84aa091ad8 @type="spoon", @clean=true>]
p silverware_drawer.remove_item("spoon") # removing spoon
p silverware_drawer.contents # Show drawer and I still get [#<Silverware:0x007f84aa091ad8 @type="spoon", @clean=true>]
类抽屉
属性读取器:目录
def初始化
@内容=[]
结束
def添加_项目(项目)
@内容>[#]
p银器抽屉。取下物品(“勺子”)#取下勺子
p银器_drawer.contents#展示抽屉,我仍然得到
任何帮助都将不胜感激!提前谢谢你 您没有通过该对象。你只是在传递类型。因此,您必须找到类型为“spoon”的项并将其从数组中删除
def remove_item(item)
@contents.delete(@contents.find{|content| content.type == item})
end
或
@contents=@contents.reject{| content | content.type==item}
或@contents.reject!{| content | content.type==item}@内容
。(回想一下,使用reject!
,如果没有拒绝任何元素,则返回nil
。)