相关疑难解决方法(0)

对象的Ruby方法查找路径

是否有内置的Ruby方法或知名的库来返回对象的整个方法查找链?Ruby查看一个令人困惑的类序列(如本问题中所讨论的),例如对应于消息的方法,method_missing如果没有类响应消息,则调用接收器.

我把以下代码放在一起,但我确定它缺少某些情况,或者它是100%正确的.请指出任何缺陷,并指导我一些更好的代码,如果它存在.

def method_lookup_chain(obj, result = [obj.singleton_class])
  if obj.instance_of? Class
    return add_modules(result) if result.last == BasicObject.singleton_class
    r = result.last.superclass
    method_lookup_chain(obj, result << r)
  else
    return result + obj.class.ancestors
  end
end

def add_modules(klasses)
  r = []
  klasses.each_with_index do |k, i|
    r << k
    next if k == klasses.last
    r << (k.included_modules - klasses[i+1].included_modules)
  end
  r.flatten
end

# EXAMPLES

module ClassMethods; end
module MoreClassMethods; end
class A
  extend ClassMethods
  extend MoreClassMethods
end
p method_lookup_chain(A) # => [#<Class:A>, MoreClassMethods, …
Run Code Online (Sandbox Code Playgroud)

ruby

5
推荐指数
1
解决办法
3252
查看次数

标签 统计

ruby ×1