在Ruby中,如何追踪到具体响应方法调用的具体类?
- 内容介绍
- 文章标签
- 相关推荐
本文共计377个文字,预计阅读时间需要2分钟。
在Ruby中,如果我的类层次结构看起来像这样的结构(非非常规符号):A + B + C在C类中定义了一个方法foo,那么是否有一些内部权限允许我确定C是响应A.new.foo方法的类的实例?
是的,可以通过Ruby的继承机制和对象查找来决定。
在Ruby中,当调用一个对象的方法时,它首先在对象本身的类中查找该方法。如果找不到,它会沿着继承链向上查找,直到找到该方法或者到达顶层(通常是Object类)。
所以,如果C类继承了B类,B类又继承了A类,并且C类中定义了`foo`方法,那么:
- 如果你有一个C类的实例,并且调用`foo`方法,Ruby会在C类中查找该方法。- 如果C类没有定义`foo`方法,Ruby会继续在B类中查找。- 如果B类也没有定义`foo`方法,Ruby会继续在A类中查找。
因此,如果你有一个A类的新实例并且调用`new.foo`,Ruby会在A类中查找`foo`方法。如果A类定义了`foo`方法,那么A类就是响应`A.new.foo`的类。
总结来说,C类定义的`foo`方法是否允许你确定A是响应`A.new.foo`的类,取决于这个方法的定义位置和类的继承关系。如果`foo`方法在A类中定义,那么A就是响应的类。如果不在A类中定义,那么就不是。
所以,在 Ruby中,如果我的类层次结构看起来像(非常符号)A< B< C<宾语 有一个在C类中定义的方法“foo”,是否有一些内省允许我确定C是定义响应A.new.foo的方法的类?
是的……做A.new.method(:foo).owner.它会给你C班.阅读#owner.本文共计377个文字,预计阅读时间需要2分钟。
在Ruby中,如果我的类层次结构看起来像这样的结构(非非常规符号):A + B + C在C类中定义了一个方法foo,那么是否有一些内部权限允许我确定C是响应A.new.foo方法的类的实例?
是的,可以通过Ruby的继承机制和对象查找来决定。
在Ruby中,当调用一个对象的方法时,它首先在对象本身的类中查找该方法。如果找不到,它会沿着继承链向上查找,直到找到该方法或者到达顶层(通常是Object类)。
所以,如果C类继承了B类,B类又继承了A类,并且C类中定义了`foo`方法,那么:
- 如果你有一个C类的实例,并且调用`foo`方法,Ruby会在C类中查找该方法。- 如果C类没有定义`foo`方法,Ruby会继续在B类中查找。- 如果B类也没有定义`foo`方法,Ruby会继续在A类中查找。
因此,如果你有一个A类的新实例并且调用`new.foo`,Ruby会在A类中查找`foo`方法。如果A类定义了`foo`方法,那么A类就是响应`A.new.foo`的类。
总结来说,C类定义的`foo`方法是否允许你确定A是响应`A.new.foo`的类,取决于这个方法的定义位置和类的继承关系。如果`foo`方法在A类中定义,那么A就是响应的类。如果不在A类中定义,那么就不是。
所以,在 Ruby中,如果我的类层次结构看起来像(非常符号)A< B< C<宾语 有一个在C类中定义的方法“foo”,是否有一些内省允许我确定C是定义响应A.new.foo的方法的类?
是的……做A.new.method(:foo).owner.它会给你C班.阅读#owner.
