这与Overload each method with order中的问题类似,但不同的是,我希望支持所有相关的可枚举方法,而不必重新定义。
使用MIXIN,如何重写枚举提供的每个和所有关联的方法,而不必重新定义它们。例如:

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!

生成:
3
2
1
[1, 2, 3]

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

最佳答案

您还需要重写比较运算符(<=>)以使其返回相同的顺序,并在类中返回include Enumerable

关于ruby - 如何***重载***以建立所需的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9063954/

10-13 04:53