이것은 Overload each method with order에 게시 된 질문과 비슷하지만 재정의하지 않고 지원되는 모든 관련 열거 형 메서드를 지원하려는 차이점이 있습니다.각 주문에 ***을 오버로드하여 원하는 순서를 설정하는 방법
내가 그들 각각을 다시 정의없이 열거가 제공 각 및 모든 관련 메소드를 오버라이드 (override) 어떻게하는 믹스 인을 사용. 예를 들어 :
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]
이 재정의 각수집 재정의 한 것으로 보이지 않는다!
'Enumerable # collect'는'each' 메소드를 존중하지 않는 자체 구현으로'Array'에서 오버라이드됩니다. –