在 Ruby 中,当创建一个新类时,我们将像这样定义构造函数方法:
class Thing
def initialize
do_stuff
end
end
然而,当实际创建对象的实例时,我们发现自己没有调用initialize
在实例上但是new
在课堂上。
既然如此,我们为什么不定义::new
?
class Thing
def self.new
do_stuff
end
end
有什么东西吗::new
在幕后做的initalize
没有定义?这两者有什么不同吗?将定义::new
工作?或者只是这样def initialize
短于(不)于def self.new
?
我认为造成这种差异一定是有充分理由的。
New 为新对象分配空间并创建它。然后它调用对象初始化方法以使用分配的内存创建一个新对象。通常,您想要自定义的唯一部分是实际创建,并且很乐意将后面的内存分配留给 Object.new 方法,因此您编写了一个初始化方法。 new 在底层所做的事情看起来像这样(C 语言除外):
class Object
def self.new(*args, &block)
object = allocate
object.send(:initialize, *args, &block)
return object
end
end
因此,当您调用 Object.new 时,实际发生的情况是:
1)分配内存
2) 调用对象的初始化方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)