當談到運行時反思和動態代碼生成時,我不認爲ruby除了可能對某些lisp方言有任何競爭對手。有一天,我正在做一些代碼練習來探索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
各種組合。有沒有線上/線下資源,我可以找到更多有關這種動態技巧的資訊?