与定义respond_to_missing?
相反,定义的意义是respond_to?
什么?如果你respond_to?
为某个类重新定义会出现什么问题?
问问题
11842 次
2 回答
54
如果没有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 核心提交者)在respond_to_missing?
.
于 2012-12-10T00:52:03.730 回答
3
创建respond_to_missing是一个好习惯吗?如果您要覆盖method_missing。这样,该类将告诉您您正在调用的方法存在,即使它没有明确声明。
回应?可能不应该被覆盖:)
于 2019-11-06T14:28:49.813 回答