gpt4 book ai didi

ruby - 如何重载 ***each*** 以建立所需的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:10 24 4
gpt4 key购买 nike

这类似于 Overload each method with order 中发布的问题但不同之处在于,我希望无需重新定义即可支持所有关联的可枚举方法。

使用混合宏,我如何覆盖 each 以及由 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!

最佳答案

您还需要覆盖比较运算符 (<=>) 以使其返回相同的顺序,以及 include Enumerable在你的类里面。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com