2012-01-06 3 views

ответ

16

Давайте посмотрим:

class Test 
    def initialize; end 
end 

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

Печатается true, так initialize является частным методом. Это имеет смысл, оно вызывается только классом класса new, если объект создан. Если мы хотим, мы можем сделать что-то вроде этого:

class Test 
    def initialize 
    @counter = 0 
    end 

    def reset! 
    initialize 
    end 
end 

Злоупотребляя конструктор, как это, однако, может привести к проблемам, если он делает больше, чем просто инициализации переменной.

+6

Вы также можете позвонить 'initialize' объекта с помощью' obj.send (: инициализация) '. –

+1

@undur_gongor: Да, это работает для любого частного метода. –

4

initialize метод в классе автоматически становится частным.

Вы можете проверить это с помощью:

puts ClassName.private_methods.sort 
Смежные вопросы