Ruby类初始化(构造函数)是私有方法还是公共方法?

Man*_*ava 11 ruby access-specifier

在ruby中初始化方法(构造函数)是私有的还是公共的?

Nik*_* B. 16

让我们来看看:

class Test
  def initialize; end
end

p Test.new.private_methods.sort.include?(:initialize)
Run Code Online (Sandbox Code Playgroud)

这打印true,initialize私有方法也是如此.这是有道理的,只有new在创建对象时才通过类方法调用它.如果我们想要,我们可以这样做:

class Test
  def initialize
    @counter = 0
  end

  def reset!
    initialize
  end
end
Run Code Online (Sandbox Code Playgroud)

如果它不仅仅是简单的变量初始化,那么滥用这样的构造函数可能会导致问题.

  • 你也可以通过`obj.send(:initialize)`调用一个对象的`initialize`. (6认同)