在Ruby中,将代码放在initialize()
方法中而不是直接放在类体中有什么区别?当拨打MyClass.new
时,两者似乎都会被执行。Ruby:initialize()vs class body?
很明显,initialize()
可以接受参数,但那是唯一的区别吗?
class MyClass
puts 'Hello'
def initialize(params)
puts 'World'
end
end
在Ruby中,将代码放在initialize()
方法中而不是直接放在类体中有什么区别?当拨打MyClass.new
时,两者似乎都会被执行。Ruby:initialize()vs class body?
很明显,initialize()
可以接受参数,但那是唯一的区别吗?
class MyClass
puts 'Hello'
def initialize(params)
puts 'World'
end
end
尝试创建的MyClass的
a = MyClass.new
b = MyClass.new
两个实例看出区别:
你好
世界
世界
类体中的代码只执行一次 - 当ruby加载文件时。每次创建类的新实例时,initialize()都会执行。
如果您在类体中编写代码,它将在ruby加载该类时执行,加载只能发生一次。只有当你创建一个类的实例时,才会执行初始化,并且每次调用新的类时都会执行初始化。
现在,当你做MyClass.new红宝石加载MyClass类将查找类内存,如果它不然后加载的类,然后调用其新的方法来创建instanc
好,initialize
得到由new
称为,而类体在类定义/加载时被评估。
此外,请尝试在课程正文或initialize
中设置实例变量。你会注意到后者将属于创建的对象,而第一个属于类实例(因此是名称类实例变量)。
另外,在_initialize_中有对象实例可以使用。 – tokland 2011-05-18 12:11:05