1

Ruby 1.9.3 と 2.0.0 の両方で動作するメソッドが public、protected、private のいずれであるかに関係なく、存在する場合にのみメソッドを呼び出す最良の方法は何ですか?

4

1 に答える 1

3

respond_to? 2 番目のパラメーターを受け入れます。これが設定されている場合、メソッドの可視性フラグは無視されます。

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
于 2013-08-15T20:49:49.033 に答える