2013-03-22 16 views
5

có cách nào để có nhiều phương thức "khởi tạo" trong ruby ​​không? Ví dụ: một phương pháp ngoại trừ một đối số trong khi một phương thức khác loại trừ ba đối số?có nhiều hàm tạo trong ruby ​​

Something như

class One 
    def initialize (a) 
    puts a 
    end 
    def initialize_1 (a,b) 
    puts a ,b 
    end 
end 
+2

Tôi đồng ý với ramblex. Cũng có liên quan - http://stackoverflow.com/questions/9373104/why-does-ruby-not-support-method-overloading. Nếu có vấn đề cụ thể mà bạn đang cố gắng giải quyết, bạn có thể thử đăng câu hỏi cụ thể hơn vì có thể có một cách khác để giải quyết vấn đề đó. –

+0

cảm ơn, không có vấn đề cụ thể im chỉ cố gắng tìm ra các ins and outs của ngôn ngữ. Tôi hiểu rằng câu trả lời là không nhưng im vẫn không chắc chắn làm thế nào bạn nhận được xung quanh đó. – 13driver

+0

bạn có thể đạt được hiệu ứng với đá quý 'konstructor' https://github.com/snovity/konstructor, ví dụ: bạn sẽ phải khai báo 'konstructor: initialize_1' – snovity

Trả lời

5

initialize là thực sự không phải là một nhà xây dựng. Bạn thực sự có thể có hai nhà xây dựng.

class One 
    singletonclass.class_eval{alias old_new :new} 
    def self.new a 
    puts a 
    old_new 
    end 
    def self.new_1 a, b 
    puts a, b 
    old_new 
    end 
end 
+0

Điều này làm bạn mua gì? Tất cả mọi thứ vẫn còn kênh thông qua bản gốc mới và một cái mới khởi tạo. Cũng có thể nói 'def self.new_1 (a, b); mới (a, b); kết thúc mà không có sự phức tạp của goo bí danh. Nó được phổ biến để có các nhà xây dựng thay thế với tên gọi khác nhau mà đóng gói lại args của họ vào một hình thức chung cho cơ sở mới. – dbenhur

+0

chúng ta gặp lại, không phải anh là người đã cho tôi một lời giải thích đáng yêu như thế nào 'self' hoạt động sao? Dù sao điều này vẫn than phiền 'sai số đối số' bất cứ khi nào tôi gửi nhiều hơn thì một đối số. Ngoài ra, tôi không chắc chắn điều này sẽ giúp tôi ... – 13driver

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