【发布时间】:2013-04-18 23:45:37
【问题描述】:
查看此类定义:
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。
【问题讨论】:
-
super 在当前对象的上下文中运行,而不是在超类中。所以它只是调用了respond_to的默认实现?
标签: ruby