定义respond_to_missing?
而不是定义respond_to?
有什么意义?如果您为某个班级重新定义respond_to?
会出现什么问题?
答案 0 :(得分:41)
如果未定义respond_to_missing?
,尝试通过method
获取方法将失败:
class Foo
def method_missing name, *args
p args
end
def respond_to? name, include_private = false
true
end
end
f = Foo.new
f.bar #=> []
f.respond_to? :bar #=> true
f.method :bar # NameError: undefined method `bar' for class `Foo'
class Foo
def respond_to? *args; super; end # “Reverting” previous redefinition
def respond_to_missing? *args
true
end
end
f.method :bar #=> #<Method: Foo#bar>
Marc-André(Ruby核心提交者)有一个很好的blog post on respond_to_missing?
。
答案 1 :(得分:0)
如果您要覆盖 method_missing ,那么创建 respond_to_missing?是个好习惯。这样,即使未明确声明该类,该类也会告诉您正在调用的方法存在。
回应?不应该被覆盖:)