在Ruby中,将代码放在initialize()
方法而不是直接放在类体中有什么区别?两者似乎在调用MyClass.new
时执行。
显然,initialize()
可以接受参数,但这是唯一的区别吗?
class MyClass
puts 'Hello'
def initialize(params)
puts 'World'
end
end
答案 0 :(得分:61)
尝试创建MyClass的两个实例
a = MyClass.new
b = MyClass.new
看到差异:
你好
世界
世界
类主体中的代码只执行一次 - 当ruby加载文件时。每次创建类的新实例时都会执行initialize()。
答案 1 :(得分:9)
嗯,initialize
被new
调用,而类体在类定义/加载上得到评估。
此外,尝试在类体或initialize
中设置实例变量。您会注意到后者将属于创建的对象,而第一个将属于类实例(因此名称类实例变量)。
答案 2 :(得分:3)
如果你在类体中编写代码,它将在ruby加载该类时执行,加载只能发生一次。并且只有在创建类的实例时才会执行初始化,并且每次调用new类时都会执行初始化。
现在当你做MyClass.new ruby加载类MyClass时,它会在内存中寻找类,如果它不是那么加载该类,然后调用它的新方法来创建instanc