Допустим, у меня есть базовый класс с тремя подклассами.Базовый класс имеет метод, общий для большинства подклассов, и имеет псевдоним:
class Beer
def bottle_content
'250 ml'
end
alias_method :to_s, :bottle_content
end
class Heineken < Beer
end
class Stella < Beer
end
class Duvel < Beer
def bottle_content
'330 ml'
end
end
Теперь, если метод to_s
вызывается для расходящегося экземпляра подкласса Duvel
,250 ml
возвращается вместо 330 ml
.
Я понимаю, почему;псевдоним сделан на уровне суперкласса.И я знаю, что это можно исправить, переопределив alias_method
в расходящемся классе.Но есть ли другой способ сделать это?
Очевидно, что использование метода для to_s
будет работать:
class Beer
def bottle_content
'250 ml'
end
def to_s; bottle_content; end
end
Но, может быть, есть более элегантный подход?