ruby-向类添加可枚举功能等

ruby-向类添加可枚举功能等,ruby,enumerable,Ruby,Enumerable,我想给我的类(处理底层数据结构)提供所有这些ruby功能包含可枚举的仅执行部分作业。 最好的办法是什么 class A def initialize @data = 10.times.map { |e| e } end include Enumerable def each(&block) @data.each(&block) end end #works great A.new.each {} A.ne

我想给我的类(处理底层数据结构)提供所有这些ruby功能<代码>包含可枚举的仅执行部分作业。 最好的办法是什么

class A
    def initialize
        @data = 10.times.map { |e| e }
    end

    include Enumerable
    def each(&block)
        @data.each(&block)
    end
end

#works great
A.new.each {}
A.new.select {|e| e > 3}
A.new.reject {|e| e > 3}
A.new.partition {|e| e > 3}
A.new.count

# those will fail
A.new.size
A.new.length
A.new.select! {|e| e > 3}

size
length
以及所有就地改变集合的方法,如
select,不是可枚举的
的一部分


如果需要它们,您必须自己实现它们。

您提供的示例与
数组没有什么不同,因此您可以按如下方式实现它

class A < Array; end

a = A.new(10.times.map { |e| e })

#works great
a.new.each {}
a.new.select {|e| e > 3}
a.new.reject {|e| e > 3}
a.new.partition {|e| e > 3}
a.new.count
a.new.size
a.new.length
a.new.select! {|e| e > 3}
所以

a = A.new(10.times.map { |e| e })
a.contains_the_answer_of_all_things?
#=> false

b = A.new(100.times.map {|e| e })
b.contains_the_answer_of_all_things?
#=> true

除了可枚举功能之外,您的类还需要做什么?因为从
数组
的简单继承可能会完成这项工作。提示:
大小
长度
不是在
可枚举
上定义的,而是
A.new.count
有效。@xlembouras有趣。需要详细说明吗?ruby库中有各种类型的mixin,您也可以使用它们。请参阅此链接是的,
Enumerable
中没有一部分,因此我提出了问题。在这里等一些红宝石魔法。TNX这里没有ruby魔法,要么您自己为数据结构实现它们,要么您从
Array
继承来使用提供的方法。
a = A.new(10.times.map { |e| e })
a.contains_the_answer_of_all_things?
#=> false

b = A.new(100.times.map {|e| e })
b.contains_the_answer_of_all_things?
#=> true