何时在smalltalk中调用初始化?

Adi*_*ula 3 smalltalk gnu-smalltalk

我有一个实例变量'a'的类.

当我使用new创建类的新实例时,调用的方法的顺序是什么?

对象如何知道它应该调用initialize方法?

如果我创建一个类方法来为我的实例变量赋值,是否仍会为我的类方法未调用的其他实例变量调用初始化?

Stu*_*ing 7

initialize通常由new方法本身调用.

我相信标准的实现是:

new
    ^self basicNew initialize
Run Code Online (Sandbox Code Playgroud)

#basicNew是一个只创建对象的原语,但不进行初始化.在basicNew之后,所有实例变量都将为nil.

请注意,在Smalltalk的所有实现中都不会自动调用initialize方法(但我不知道哪些不执行)因此如果您想要正确移植,则应该#new在类中重写以显式调用它.