2013-03-26 29 views
12

Sto delegando un paio di metodi e voglio che siano tutti privati.Rendi privati ​​i metodi delegati

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

    def bubbles 
    0 
    end 
end 

potrei dire private :+, ma avrei dovuto farlo per ogni metodo. Esiste un modo per restituire un elenco di metodi delegati o delegare metodi privati?

+0

Questa parte non è chiara: "Potrei dire privato: +, ma poi ogni metodo che delegato deve essere immediatamente, esplicitamente reso privato". Perché? – sawa

+0

Se voglio delegare 10 metodi e averli tutti privati, dovrei fare questo: '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

+0

Quindi, il modo in cui ha scritto era fuorviante. – sawa

risposta

5

scimmia cerotto Module per aggiungere un metodo di supporto, proprio come quello che ActionSupport pacchetto fa:

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 
35

Perché delegate restituisce una lista dei simboli passati in è possibile concatenare le chiamate ai metodi in questo modo:

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

Nessuna potenza di blocco e splitter. Questo ragazzo merita una medaglia. –

+1

dai a quell'uomo un biscotto! – equivalent8

Problemi correlati