Скажем, у меня есть гипотетический камень, my_gem
, который определяет класс AwesomeClass
, и драгоценный камень включает в себя бинарный файл, который будет только работа по AwesomeClass
, но будет нагрузка любой код в моем lib/
каталог, скажем. Я хочу чисто расширить некоторые методы класса, иногда называя эквивалент super
.Расширение класса, определенного в гем
Скажем, это выглядит следующим образом:
class AwesomeClass
def cool_method
...
end
end
И здесь, в моем коде библиотеки, я хочу сделать что-то вроде:
AwesomeClass.class_eval
def cool_method
(call the original method here)
...
end
end
Как бы вы сделать это? Есть alias
мой единственный реальный вариант? Есть ли какой-то лучший способ, который я пропускаю? Что-то кроме class_eval
?
Как вы видите, что работаете, если камень только когда-либо хочет «AwesomeClass», а не мой? –
@ DanielBogan Затем Gem построен неправильно, это не значит, что система типа Ruby предназначена для работы. Пока ваш объект поддерживает тот же метод, что и вызов 'AwesomeClass', камень не должен его отклонять. – meagar
Да, это имеет смысл. Ладно, рад, спасибо! –