【发布时间】:2011-09-06 07:10:09
【问题描述】:
class Class
def mixin_ancestors(include_ancestors=true)
ancestors.take_while {|a| include_ancestors || a != superclass }.
select {|ancestor| ancestor.instance_of?(Module) }
end
end
class MyTestClass
end
上面的代码取自How do you list included Modules in a Ruby Class?
我有以下问题。
1) 通过上面代码中的“def mixin_ancestors”,我们定义了一个实例方法。但是做 'a = MyTestClass.new ; a.mixin_ancestors' 表示未定义的方法 mixin_ancestors。
2) 所以我做了‘MyTestClass. mixin_ancestors'。它给了我一份清单。
3) 我认为“祖先”是一种方法。 “祖先”方法在哪个上下文中运行。发现我做了'method(ancestors).owner'但得到了错误-method: [MyTestClass, Object, Kernel, BasicObject] is not a symbol (TypeError).从我自己以前的问题Determine the class to which a method belongs in rails得到这个技巧
4) 就像上面代码中的superclass 方法在哪个上下文上运行的第三点一样。
感谢您的帮助
【问题讨论】:
标签: ruby