2012-01-06 17 views

Odpowiedz

16

Zobaczmy:

class Test 
    def initialize; end 
end 

p Test.new.private_methods.sort.include?(:initialize) 

Drukuje true, więc initialize to prywatna metoda. Ma to sens, jest wywoływane tylko przez metodę klasy new, jeśli obiekt jest tworzony. Jeśli chcemy, możemy zrobić coś takiego:

class Test 
    def initialize 
    @counter = 0 
    end 

    def reset! 
    initialize 
    end 
end 

Nadużywanie konstruktora takiego może jednak prowadzić do problemów, jeśli nie więcej niż zwykłą zmienną inicjalizacji.

+6

Można również zadzwonić 'initialize' obiektu przez' obj.send (: zainicjować) '. –

+1

@undur_gongor: Tak, to działa dla każdej prywatnej metody. –

4

Metoda initialize w klasie automatycznie staje się prywatna.

Można to sprawdzić za pomocą:

puts ClassName.private_methods.sort 
Powiązane problemy