Ruby 如何重载***每个***以建立所需的订单
这类似于中发布的问题,但不同的是我希望所有相关联的可枚举方法都得到支持,而无需重新定义 使用mixin,我如何重写enumerable提供的每个和所有相关方法,而不重新定义它们。例如: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
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]