Ruby:initialize()vs类体?

时间:2011-05-18 11:01:40

标签: ruby

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

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

class MyClass
  puts 'Hello'

  def initialize(params)
    puts 'World'
  end
end

3 个答案:

答案 0 :(得分:61)

尝试创建MyClass的两个实例

a = MyClass.new
b = MyClass.new

看到差异:

  

你好

     

世界

     

世界

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

答案 1 :(得分:9)

嗯,initializenew调用,而类体在类定义/加载上得到评估。

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

答案 2 :(得分:3)

如果你在类体中编写代码,它将在ruby加载该类时执行,加载只能发生一次。并且只有在创建类的实例时才会执行初始化,并且每次调用new类时都会执行初始化。

现在当你做MyClass.new ruby​​加载类MyClass时,它会在内存中寻找类,如果它不是那么加载该类,然后调用它的新方法来创建instanc