我委託一些方法,並希望他們都是私人的。使委派的方法私人化
class Walrus
delegate :+, :to => :bubbles
def bubbles
0
end
end
我可以說private :+
,但我不得不這樣做的每個方法。有沒有辦法返回一個委託方法的列表或委託創建私人方法?
我委託一些方法,並希望他們都是私人的。使委派的方法私人化
class Walrus
delegate :+, :to => :bubbles
def bubbles
0
end
end
我可以說private :+
,但我不得不這樣做的每個方法。有沒有辦法返回一個委託方法的列表或委託創建私人方法?
猴子補丁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
因爲delegate
返回即可鏈傳遞的符號列表的方法調用是這樣的:
private *delegate(:foo, :bar, :to => :baz)
沒有monkeypatching和摔跤電源。這傢伙值得一枚獎牌。 – 2017-01-03 13:10:38
給那個男人一個餅乾! – equivalent8 2018-02-08 09:56:20
這部分內容並不清楚:「我可以說私密性:+,但那麼我所委託的每種方法都必須立即明確爲私有方式。這是爲什麼? – sawa 2013-03-26 17:25:26
如果我想委託10個方法,並讓它們都是私有的,我將不得不這樣做:'delegate:method_1,:method_2,:method_3,:method_4,:method_5,:method_6,:method_7,:method_8,:method_9 ,:method_10,:to =>:bubbles' then private:method_1,:method_2,:method_3,:method_4,:method_5,:method_6,:method_7,:method_8,:method_9,:method_10' – Chris 2013-03-26 18:18:47
然後,寫的是誤導。 – sawa 2013-03-26 18:40:42