当谈到 Squeak Smalltalk 时,我有点新手,所以我可能会做错什么,或者对 Squeak 应该如何工作做出错误的假设。不过,我想知道我哪里出错了......
我试图让 Blower 类派生自 Array。Blower 基本上是一个数组,但有一个称为 index 的附加实例变量和一些方法。我认为当我创建一个新对象时初始化方法会自动运行,并且它会初始化数组和索引变量,但这似乎没有发生。如果我稍后“手动”运行初始化,它会按预期工作。
Array variableSubclass: #Blower
instanceVariableNames: 'index'
(...)
Blower >> initialize
super initialize.
1 to: self size do: [ :ix | self at: ix put: ix ].
self shuffle.
index := 1.
如果我在工作区中执行以下操作:
blower := Blower new: 10.
blower inspect.
检查窗口显示(不是我所期望的):
\#( nil nil nil nil nil nil nil nil nil nil )
index: nil
如果我手动运行初始化,检查窗口是正确的:
blower initialize.
\#( 6 4 1 10 2 8 3 ... )
index: nil
那么当我创建 Blower 并正确设置它时,为什么不初始化运行呢?反正有没有自动化这个,所以它发生在创建?IE。初始化工作?