Chr*_*ris 17 ruby delegates activesupport
我委托了几种方法,并希望它们都是私有的.
class Walrus
delegate :+, :to => :bubbles
def bubbles
0
end
end
Run Code Online (Sandbox Code Playgroud)
我可以说private :+,但我必须为每种方法做到这一点.有没有办法返回委托方法列表或委托创建私有方法?
twe*_*ked 54
因为delegate返回传入的符号列表,您可以链接方法调用,如下所示:
private *delegate(:foo, :bar, :to => :baz)
Run Code Online (Sandbox Code Playgroud)
猴子补丁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
Run Code Online (Sandbox Code Playgroud)