【问题标题】:How to delete an class instance inside of an array in Ruby?如何在 Ruby 中删除数组中的类实例?
【发布时间】:2014-10-08 07:51:20
【问题描述】:

我试图通过重写抽屉类中的方法“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 = @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>]

任何帮助将不胜感激!提前谢谢!

【问题讨论】:

    标签: ruby arrays class


    【解决方案1】:

    您没有传入对象。您只是传入类型。所以你必须找到类型为“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 }; @contents。 (回想一下reject!,如果没有元素被拒绝,则返回nil。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多