У меня есть следующий класс:Делегат атрибут методы родительского объекта
class Alphabet
attr_reader :letter_freqs, :statistic_letter
def initialize(lang)
@lang = lang
case lang
when :en
@alphabet = ('A'..'Z').to_a
@letter_freqs = { ... }
when :ru
@alphabet = ('А'..'Я').to_a.insert(6, 'Ё')
@letter_freqs = { ... }
...
end
@statistic_letter = @letter_freqs.max_by { |k, v| v }[0]
end
end
foo = Alphabet.new(:en)
Центральный элемент здесь @alphabet
.
Я хотел бы сделать это своего рода контейнер класса для вызова методов массива непосредственно, как
foo[i]
foo.include?
вместо явного доступа @alphabet
:
foo.alphabet[i]
foo.alphabet.include?
Я знаю, что я мог бы определить много таких как
def [](i)
@alphabet[i]
end
, но я ищу подходящий способ «наследуя» их.
Ничего себе это приятно :) Есть ли шанс, что я могу делегировать ВСЕ методы? или, может быть, это не очень хорошая идея? –
Не делегируйте все методы, поскольку они, вероятно, разделяют одни и те же имена методов, такие как 'class', что, вероятно, сделает хаос. – Zippie
да, вы можете; Я обновил ответ – mdesantis