У меня есть класс (очень упрощенный ради этого обсуждения)
class MyClass
def initialize
@myrecs = %w(a b c d)
end
def each_rec
@myrecs.each {|r| yield(r)}
end
end
и я использую его как
x = MyClass.new
x.each_rec { |r| .... }
Так как мой метод each_rec
в основном делает myrecs.each
, Я хотел как-то определить, что each_rec
только вперед each
. Я могу достичь желаемого эффекта, явно передавая блок, то есть
def each_rec(&block)
@myrecs.each(&block)
end
, но мне интересно, можно ли достичь моей цели, не имея блока в качестве явного параметра. Я безуспешно попробовал следующие подходы:
(1) Используйте тот факт, что each
возвращает Enumerator при вызове без блока:
def each_rec
@myrecs.each
end
(2) Создайте Enumerator:
def each_rec
@myrecs.enum_for(:each)
end
В обоих случаях я не получил ошибку, но блок, переданный в each_rec
, просто не был введен.