2012-10-05 38 views
1

加入有沒有辦法讓所有的常量(包括模塊和類),它們添加或重新定義在加載外部ruby文件和他們的方法和類或實例變量列表(陣列)?得到什麼時負載

回答

3

這應該做的伎倆:

def all_constants_with_methods 
    constants = Object.constants.map { |sym| Object.const_get sym } 
    Hash[constants.map { |constant| [constant, (constant.instance_methods rescue [])] }] 
end 

before = all_constants_with_methods 
load foo.rb 
after = all_constants_with_methods 

constants_added = after.keys - before.keys 
methods_added = Hash[after.keys.map do |c| 
         [c, after[c] - (before[c] || [])] 
        end.reject do |_, v| 
         v.empty? 
        end] 

有沒有辦法,我知道的知道,如果一個方法被重新定義,雖然。您可以輕鬆地將其擴展到類變量(使用class_variables)和類實例變量(使用instance_variables)。

+0

謝謝。我也會考慮遞歸地應用這個來獲取常量內的常量。 – sawa