Сколько способов можно добавить методы к объекту ruby?

Когда дело доходит до самоанализа во время выполнения и генерации динамического кода, я не думаю, что у ruby ​​есть конкуренты, за исключением, возможно, некоторых диалектов шепелявости. На днях я делал упражнение по коду, чтобы исследовать динамические возможности Ruby, и начал задумываться о способах добавления методов к существующим объектам. Вот 3 способа, которые я мог бы придумать:

obj = Object.new

# add a method directly
def obj.new_method
  ...
end

# add a method indirectly with the singleton class
class << obj
  def new_method
    ...
  end
end

# add a method by opening up the class
obj.class.class_eval do
  def new_method
    ...
  end
end

Это только верхушка айсберга, потому что я до сих пор не исследовал различные комбинации instance_eval , module_eval и define_method . Есть ли онлайн / офлайн-ресурс, где я могу узнать больше о таких динамических трюках?

5
задан davidk01 13 June 2011 в 06:00
поделиться