(отредактировано, чтобы сделать вопрос более специфичным)Ruby: выполнить одноплодный метод в другом контексте
Я хотел бы знать, если это возможно, чтобы выполнить одноплодный метод в контексте другого объекта, как показан в следующем примере:
class A
def initialize
@foo = 'foo'
end
end
def A.singleton(*args)
puts 'in singleton'
puts @foo
end
A.new.instance_eval &A.method(:singleton)
# output is:
# - in singleton
# desired output:
# - in singleton
# - foo
Не могли бы вы объяснить, почему вы используете эту запутанную структуру? Я не могу придумать никаких причин, по которым определение метода singleton в модуле приведет к тому, что метод экземпляра будет определен в охватывающем модуле. Если мы знаем пример использования, мы можем показать вам более идиоматический подход. – Max
Это эксперимент и чисто синтаксический способ, позволяющий группировать или добавлять дополнительные функции к определенным методам. Я ценю более идиоматический способ использования метода класса, например, 'special_method: baz' и т. Д., Но я просто изучал альтернативный подход. Возможным приложением может быть memoize метод таким образом, то есть 'def memoize.baz', но я согласен, что это запутывает и, вероятно, не то, что я буду использовать в реальном проекте. Мне все равно было бы интересно узнать, возможно ли это. – coxy