请参阅此类定义:
class T
def respond_to?(name)
name.to_s == 't' || super
end
def t; p 't'; end
def t2; p 't2'; end
end
当我打电话
T.new.respond_to? :t2
似乎它会返回 false,因为它要么等于 't',要么不响应 T 的超类,即 Object。但是,它返回 true。那么有人可以解释这是如何工作的吗?
更新:我意识到我之前的想法是错误的。
class P
def t; self.class; end
end
class C < P
def t
p self.class
p super
end
end
当我打电话给 C.new.t
我希望结果是:
C
P
但是,我得到了:
C
C
那么返回respond_to?问题,当我调用 super 时,它运行 Object#respond_to?,但仍在 C 的上下文/范围内,因此它返回 true。