saw*_*awa 40 ruby metaprogramming
定义respond_to_missing?与定义相反的重点是什么respond_to??如果重新定义respond_to?某些课程会出现什么问题?
And*_*all 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>
Run Code Online (Sandbox Code Playgroud)
Marc-André(Ruby核心提交者)有一篇很好的博客文章respond_to_missing?.
创建respond_to_missing 是一个很好的做法吗?如果您要覆盖method_missing。这样,类就会告诉您正在调用的方法存在,即使它没有显式声明。
回应?可能不应该被覆盖:)