У меня есть класс, в котором я хочу, чтобы «каждый» приводил к другому пользовательскому объекту, поэтому я написал это:
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}
выводит правильное значение для вызова этого метода.
Но когда я использую select, например,
my_price_set.select {|rec| rec.mymethod == 1}
Я получаю сообщение об ошибке «неопределенный метод» «mymethod» для массива: ... Итак, rec (в «select») - это не Fq_price_rec, это массив (из которых Fq_price_rec является подклассом). Я (очевидно, ошибочно) думал, что переопределение «каждого» будет означать, что итерационные методы, такие как «выбор», будут использовать его, то есть версию «каждого» подкласса. Является ли простой ответ, что я также должен переопределить «выбор», или есть более элегантное решение.
Да, я довольно новичок в Ruby.
ТИА