Ruby:初始化()vs类体?

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

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

 class MyClass puts 'Hello' def initialize(params) puts 'World' end end 

尝试创buildMyClass的两个实例

 a = MyClass.new b = MyClass.new 

看到不同之处:

你好

世界

世界

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

那么, initializenew调用,而类的主体获得评估类定义/加载。

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

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

现在,当你做MyClass.newruby加载类MyClass时,它会查找内存中的类,如果它不是然后加载该类,然后调用其新方法来创build实例