2013-03-26 39 views
12

Tôi đang ủy thác một vài phương pháp và cũng muốn tất cả các phương thức này là riêng tư.Làm cho các phương thức được ủy quyền riêng tư

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

    def bubbles 
    0 
    end 
end 

Tôi có thể nói private :+, nhưng tôi phải làm điều đó cho mỗi phương pháp. Có cách nào để trả về một danh sách các phương thức được ủy quyền hoặc ủy nhiệm tạo các phương thức riêng không?

+0

Phần này không rõ ràng: "Tôi có thể nói riêng: +, nhưng sau đó mọi phương thức tôi ủy quyền đều phải được đặt ngay lập tức, được đặt riêng tư". Tại sao vậy? – sawa

+0

Nếu tôi muốn ủy quyền 10 phương pháp và có tất cả các phương thức riêng tư, tôi sẽ phải thực hiện điều này: 'delegate: method_1,: method_2,: method_3,: method_4,: method_5,: method_6,: method_7,: method_8,: method_9 ,: method_10,: to =>: bubbles' rồi 'private: method_1,: method_2,: method_3,: method_4,: method_5,: method_6,: method_7,: method_8,: method_9,: method_10' – Chris

+0

Sau đó, cách bạn đã viết là gây hiểu nhầm. – sawa

Trả lời

5

khỉ vá Module thêm một phương thức helper, giống như những gì ActionSupport gói làm:

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

delegate trả về một danh sách các biểu tượng thông qua năm bạn có thể chuỗi phương pháp gọi là như thế này:

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

Không có khả năng bắt sóng và bắn. Người này xứng đáng được huy chương. –

+1

cho người đàn ông đó một cookie! – equivalent8

Các vấn đề liên quan