Класс инициализации Ruby (конструктор) является закрытым методом или открытым методом? - PullRequest
11 голосов
/ 06 января 2012

Является ли метод инициализации (конструктор) закрытым или общедоступным в ruby?

Ответы [ 2 ]

16 голосов
/ 06 января 2012

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

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

Однако неправильное использование конструктора может привести к проблемам, если он не просто инициализирует переменную.

4 голосов
/ 24 июня 2014

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

Вы можете проверить это, используя:

puts ClassName.private_methods.sort
...