在 Ruby 2.1.2p95 中,我想检查一个类方法是使用定义在其中的同一个类调用的,还是使用子类调用的。也就是说,发生了以下哪些情况:
Parent.my_method
或
Child.my_method
我试过这个:
def self.my_method
if self == self.method(__method__).owner
puts "called in Parent"
end
end
但是 self
返回类的名称,例如'Parent'
,Method#owner
返回如下内容:
#<Class:Parent>
那么,嗯,那是什么?
有没有一种巧妙的方法来测试调用的是父类还是子类?
为清楚起见更新:我只在父类中定义一个类方法。我没有压倒一切。我只是直接 (Parent.my_method) 或通过子类 (Child.my_method) 调用父类方法,我希望能够分辨出它们的区别。
最佳答案
那么,嗯,那是什么?
那是对类
Parent
的单例类的检查.类方法定义为原始类的单例类的实例方法。是否有巧妙的方法来测试调用的是父类还是子类?
<罢工>是的。子类不从其父类继承类方法。因此,如果一个类方法可以无错误地调用,那么它就是在该类实例上定义的。如果它引发未定义的错误,那么它没有在该类实例上定义。 罢工>
关于ruby - Ruby 方法#owner 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860756/