gpt4 book ai didi

ruby - 在我的数组子类中覆盖 'each' 和 '[]',这有效,但 'select' 似乎忽略了它

转载 作者:数据小太阳 更新时间:2023-10-29 07:50:59 26 4
gpt4 key购买 nike

我有一个类,我希望“每个”产生另一个自定义对象,所以我这样写:

class Fq_price_set < Array
...
def [](i)
# instead of returning an array, it returns an Fq_price_rec based on the array at i
Fq_price_rec.new(super(i))
end

def each
c = 0
until c == size
yield self.[](c)
c += 1
end
end
...
end

这行得通:当我这样做的时候

my_price_set.each {|rec| puts rec.class}

它显示 Fq_price_rec。同样,

my_price_set.each {|rec| puts rec.mymethod}

为该方法调用输出正确的值。

但是当我使用选择时,例如,

my_price_set.select {|rec| rec.mymethod == 1}

我收到一条错误消息,数组的“未定义方法”‘mymethod’:...所以 rec(在‘select’中)不是 Fq_price_rec,它是一个数组(Fq_price_rec 是其子类)。我(显然是错误地)认为覆盖“each”意味着像“select”这样的迭代方法会使用它,即子类的“each”版本。是我还必须覆盖“选择”的简单答案,还是有更优雅的解决方案。

是的,我是 Ruby 的新手。

TIA

最佳答案

为什么不摆脱对 Array 的继承,而只使用 include Enumerable

class Fq_price_set
include Enumerable

def initialize(actual_array)
@actual_array = actual_array
end

# Make [] and each refer to values from @actual_array
end

关于ruby - 在我的数组子类中覆盖 'each' 和 '[]',这有效,但 'select' 似乎忽略了它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366321/

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