Инициализация класса Ruby (конструктор) - это частный метод или общедоступный метод?

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

Ответ 1

Посмотрим:

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

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

Ответ 2

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

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

puts ClassName.private_methods.sort