2013-03-22 10 views
5

jest sposób na wiele metod "inicjowania" w Ruby? Na przykład: jedna metoda z wyjątkiem jednego argumentu, a druga z wyjątkiem trzech?o wielu konstruktorach w ruby ​​

Coś

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

Zgadzam się z ramblex. Również istotne - http://stackoverflow.com/questions/9373104/why-does-ruby-not-support-method-overloading. Jeśli istnieje konkretny problem, który próbujesz rozwiązać, możesz spróbować opublikować bardziej szczegółowe pytanie, ponieważ może istnieć inny sposób jego rozwiązania. –

+0

dziękuję, nie ma konkretnego problemu, próbuję tylko zrozumieć tajniki tego języka. Rozumiem, że odpowiedź brzmi nie, ale nadal nie jestem pewien, jak sobie z tym poradzić. – 13driver

+0

można osiągnąć efekt za pomocą 'konstruktora' gem https://github.com/snovity/konstructor, np. musielibyśmy po prostu zadeklarować 'konstruktor: initialize_1' – snovity

Odpowiedz

5

initialize faktycznie nie konstruktorem. Rzeczywiście możesz mieć dwa konstruktory.

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

Co to kupuje? Wszystko w dalszym ciągu przesuwa się po oryginalnym nowym i tym, który inicjuje. Może również powiedzieć 'def self.new_1 (a, b); nowy (a, b); koniec "bez złożoności efektu aliasingu. Powszechne jest posiadanie alternatywnych konstruktorów o różnych nazwach, które przepakowują swoje argumenty w ogólną formę dla nowej bazy. – dbenhur

+0

Znów się spotykamy, czy nie jesteś facetem, który dał mi takie piękne wyjaśnienie, jak działa "jaźń"? W każdym razie to nadal narzeka "niewłaściwa liczba argumentów", ilekroć wysyłam więcej niż jeden argument. Również nie jestem pewien, co to mnie ... – 13driver

Powiązane problemy