Ruby 如何重载***每个***以建立所需的订单

Ruby 如何重载***每个***以建立所需的订单,ruby,each,overloading,enumerator,Ruby,Each,Overloading,Enumerator,这类似于中发布的问题,但不同的是我希望所有相关联的可枚举方法都得到支持,而无需重新定义 使用mixin,我如何重写enumerable提供的每个和所有相关方法,而不重新定义它们。例如: module Ordering def self.included base base.class_eval do alias_method :old_each,:each def each *args,&block

这类似于中发布的问题,但不同的是我希望所有相关联的可枚举方法都得到支持,而无需重新定义

使用mixin,我如何重写enumerable提供的每个和所有相关方法,而不重新定义它们。例如:

module Ordering
   def self.included base
       base.class_eval do
           alias_method :old_each,:each

           def each *args,&block
               reverse.old_each(*args,&block) # sample: just reverse std order
           end
       end
   end
end

class OrderedArray < Array
   include Ordering
end

a=OrderedArray.new [1,2,3]
a.each{|_| p _} # works nicely
p a.collect     # fails!

重新定义每个似乎没有重新定义收集

您还需要重写比较运算符(
)以使其返回相同的顺序,并且
在类中包含可枚举的

您还需要重写比较运算符(
)以使其返回相同的顺序,而且
在类中包含可枚举的

看起来像
可枚举的#collect
数组
中被重写,它自己的实现不尊重
每个
方法。看起来像
可枚举的#collect
数组
中被重写,它自己的实现不尊重
每个
方法。
可枚举的
模块已包含在
数组中
。只有像
min
sort
@AShelly&@-KL-7这样的方法才需要
:而我提供的示例是专门化每个方法来修改默认顺序。。。可能需要应用隐式筛选(即删除所有nil条目)。同样,我不想重新定义所有枚举方法。覆盖
每个
可枚举
模块已经包含在
数组中。只有像
min
sort
@AShelly&@-KL-7这样的方法才需要
:而我提供的示例是专门化每个方法来修改默认顺序。。。可能需要应用隐式筛选(即删除所有nil条目)。同样,我不想重新定义所有枚举方法。重写
每个

3
2
1
[1, 2, 3]