什么是调用方法的最佳方法,只有当它存在时,不管它是公共的、受保护的还是私有的,都在Ruby 1.93和2.0.0中工作?

最佳答案

respond_to?accepts a second parameter,如果设置了它,将忽略方法上的可见性标志。

foo.send(:method) if foo.respond_to?(:method, true)

class Foo
  def pub
    "public"
  end

  private
  def priv
    "private"
  end
end

> f = Foo.new
> f.send(:pub) if f.respond_to?(:pub, true)
 => "public"
> f.send(:priv) if f.respond_to?(:priv)
 => nil  # No second param to #respond_to? makes 2.0.0 fail the respond_to? check
> f.send(:priv) if f.respond_to?(:priv, true)
 => "private"
> f.send(:nonexist) if f.respond_to?(:nonexist, true)
 => nil

关于ruby - Ruby 1.9.3和2.0.0的调用方法(如果存在)与访问无关,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18255467/

10-12 21:32