17

私はいくつかのメソッドを委任しており、それらすべてをプライベートにすることも望んでいます。

class Walrus
  delegate :+, :to => :bubbles

  def bubbles
    0
  end
end

私は言うことができますprivate :+が、私はそれぞれの方法のためにそれをしなければならないでしょう。委任されたメソッドのリストを返す方法、または委任されたメソッドにプライベートメソッドを作成させる方法はありますか?

4

3 に答える 3

59

渡されたシンボルのリストが返されるためdelegate、次のようにメソッド呼び出しを連鎖させることができます。

private *delegate(:foo, :bar, :to => :baz)
于 2016-03-08T02:59:00.497 に答える
5

パックModuleと同じように、ヘルパーメソッドを追加するモンキーパッチ:ActionSupport

class Module
  def private_delegate *methods
    self.delegate *methods
    methods.each do |m|
      unless m.is_a? Hash
        private(m)
      end
    end
  end
end

# then
class Walrus
  private_delegate :+, :to => :bubbles

  def bubbles
    0
  end
end
于 2013-03-26T17:35:49.247 に答える
3

Rails 6以降を使用している場合は、Tomas Valentのおかげで、プライベートオプションを渡して、委任されたメソッドをプライベートにすることができます

delegate :method, to: :object, private: true
于 2019-12-23T13:51:02.517 に答える