2011-05-18 63 views
37

在Ruby中,将代码放在initialize()方法中而不是直接放在类体中有什么区别?当拨打MyClass.new时,两者似乎都会被执行。Ruby:initialize()vs class body?

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

class MyClass 
    puts 'Hello' 

    def initialize(params) 
    puts 'World' 
    end 
end 

回答

60

尝试创建的MyClass的

a = MyClass.new 
b = MyClass.new 

两个实例看出区别:

你好

世界

世界

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

+3

另外,在_initialize_中有对象实例可以使用。 – tokland 2011-05-18 12:11:05

3

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

现在,当你做MyClass.new红宝石加载MyClass类将查找类内存,如果它不然后加载的类,然后调用其新的方法来创建instanc

8

好,initialize得到由new称为,而类体在类定义/加载时被评估。

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