ruby-向类添加可枚举功能等
我想给我的类(处理底层数据结构)提供所有这些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
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