53

与定义respond_to_missing?相反,定义的意义是respond_to?什么?如果你respond_to?为某个类重新定义会出现什么问题?

4

2 回答 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 回答