#ruby #metaprogramming
#ruby #метапрограммирование
Вопрос:
Я понимаю, что def является ключевым словом и не может быть переопределен.
Но есть ли способ вызвать метод, когда метод регистрируется в классе (передавая имя создаваемого метода?)
Ответ №1:
Для этого и Module#method_added
предназначен метод hook:
module Foo
def self.method_added(meth)
p meth
end
def bar; end
end
# :bar
Комментарии:
1. Так будет ли это печатать имя каждого метода, который был добавлен в класс, в котором это было смешано?
Ответ №2:
Для создания микширования с этим хуком:
module Foo
def method_added(method_name)
puts "method #{method_name} added"
end
end
class Bar
extend Foo
def some_method
end
end
Обратите внимание, что method_added — это метод класса (строго метод экземпляра экземпляра класса класса sic!), Поскольку он определен в классе модуля. Поэтому мы должны добавить его с помощью extend, чтобы он переходил в метакласс Bar.
Ответ №3:
Если я правильно понял ваш вопрос,
class_instance.send(имя_метода)
должен это сделать
Комментарии:
1. Разве это не просто эквивалент object.method() ? Я хочу автоматически вызывать метод каждый раз, когда я определяю новый метод в классе.