これは、順序で各メソッドをオーバーロードするに投稿された質問に似ていますが、関連するすべての列挙可能なメソッドを再定義せずにサポートしたいという違いがあります。
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]
eachを再定義しても、collectが再定義されていないようです!