这类似于Overload each method with order中发布的问题,但不同之处在于我希望在不重新定义的情况下支持所有关联的可枚举方法。
使用 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!
生成:
3
2
1
[1, 2, 3]
重新定义每个似乎并没有重新定义收集!