Вам нужно использовать instance_method
, а не method
:
mth = instance_method(method_sym)
Не часть вопроса, но вопрос об использовании метода будет более серьезным.Я бы использовал alias_method
, чтобы переименовать старый метод, и использовать send
, чтобы вызвать его.
> class Appointment
* def self.listen_to(*methods)
* methods.each do |sym|
* new_sym = "__orig_#{sym}".to_sym
* alias_method new_sym, sym
* mth = instance_method(sym) # <- doesn't find method `something`
* define_method(sym) do
* "<listen>#{send new_sym}</listen>"
* end
* end
* end
*
* def something
* "doing something"
* end
*
* listen_to :something
* end
> puts Appointment.new.something
<listen>doing something</listen>