Ruby:initialize()vs类体?

gjb*_*gjb 38 ruby

在Ruby中,将代码放在initialize()方法中而不是直接放在类体中有什么区别?两者似乎都是在打电话时执行的MyClass.new.

显然,initialize()可以接受参数,但这是唯一的区别吗?

class MyClass
  puts 'Hello'

  def initialize(params)
    puts 'World'
  end
end
Run Code Online (Sandbox Code Playgroud)

dem*_*mas 61

尝试创建两个MyClass实例

a = MyClass.new
b = MyClass.new
Run Code Online (Sandbox Code Playgroud)

看到差异:

你好

世界

世界

类主体中的代码只执行一次 - 当ruby加载文件时.每次创建类的新实例时都会执行initialize().

  • 此外,在_initialize_中,您可以使用对象实例. (3认同)

Mic*_*ohl 9

好吧,initialize被调用new,而类体在类定义/加载上得到评估.

另外,尝试在类主体或中设置实例变量initialize.您会注意到后者将属于创建的对象,而第一个属于类实例(因此名称类实例变量).