我委托了几种方法,并且还希望它们都是私有的。
class Walrus
delegate :+, :to => :bubbles
def bubbles
0
end
end
我可以说private :+
,但我必须对每种方法都这样做。有没有办法返回委托方法列表或让委托创建私有方法?
我委托了几种方法,并且还希望它们都是私有的。
class Walrus
delegate :+, :to => :bubbles
def bubbles
0
end
end
我可以说private :+
,但我必须对每种方法都这样做。有没有办法返回委托方法列表或让委托创建私有方法?
因为delegate
返回传入的符号列表,您可以像这样链接方法调用:
private *delegate(:foo, :bar, :to => :baz)
添加一个辅助方法的猴子补丁Module
,就像ActionSupport
pack 所做的那样:
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
对于那些使用 Rails 6+ 的人,感谢 Tomas Valent 现在您可以通过 private 选项将委托方法设为私有:
delegate :method, to: :object, private: true