Когда дело доходит до самоанализа во время выполнения и генерации динамического кода, я не думаю, что у 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
. Есть ли онлайн / офлайн-ресурс, где я могу узнать больше о таких динамических трюках?