Ruby 使委托方法私有化

Ruby 使委托方法私有化,ruby,delegates,activesupport,Ruby,Delegates,Activesupport,我授权了一些方法,也希望它们都是私有的 class Walrus delegate :+, :to => :bubbles def bubbles 0 end end 我可以说private:+,但对于每个方法,我都必须这样做。是否有方法返回委派方法列表或让委派创建私有方法?Monkey patchModule添加帮助程序方法,就像ActionSupportpack所做的那样: 类模块 def private_delegate*方法 self.delegate*方法

我授权了一些方法,也希望它们都是私有的

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

  def bubbles
    0
  end
end

我可以说
private:+
,但对于每个方法,我都必须这样做。是否有方法返回委派方法列表或让委派创建私有方法?

Monkey patch
Module
添加帮助程序方法,就像
ActionSupport
pack所做的那样:

类模块
def private_delegate*方法
self.delegate*方法
方法:每个do | m|
除非m.是a?搞砸
私人(m)
结束
结束
结束
结束
#然后
海象类
私有_委托:+,:to=>:气泡
def气泡
0
结束
结束

因为
委托
返回传入的符号列表,所以可以像这样链接方法调用:

private *delegate(:foo, :bar, :to => :baz)

对于使用Rails 6+的用户,感谢Tomas Valent now:


这一部分并不清楚:“我可以说private:+,但我所委托的每个方法都必须立即显式地变为private”。这是为什么?如果我想委托10个方法,并让它们都是私有的,我必须这样做:
委托:方法1,:方法2,:方法3,:方法4,:方法5,:方法6,:方法7,:方法8,:方法9,:方法10,:to=>:气泡
然后
私有:方法1,:方法2,:方法3,:方法4,:方法5,:方法6,:方法7,:method_8,:method_9,:method_10
那么,你的写作方式是误导性的。没有蒙奇补丁和splat电源。这家伙应该得到一枚奖章。这也适用于可转发的def#u委托人:
私人(*def#u委托人(:delegatee,:foo,:bar))
我知道这个问题没有被标记。
delegate :method, to: :object, private: true