我尝试在文档中运行 GNU Smalltalk 的示例,但遇到了问题。
Object subclass: Account [
| balance |
new [
| r |
r := super new.
r init.
^r
]
init [
'initialize account' printNl.
balance := 0
]
get [
^balance
]
]
在new
方法中,init
消息永远不会发送到Account
方法。这是我的输出:
st> Account new get
nil
st> Account new init get
'initialize account'
0
我从GNU Smalltalk 文档中获取了这个示例。
有人可以帮我找出错误吗?我假设可能init
调用了 super 的方法,但Object
没有init
方法。此外应该super
创建当前类的实例吗?
感谢本杰明的回答
所以我的问题是我没有区分类函数(new
)和对象函数
固定代码
Object subclass: Account [
| balance |
init [ balance := 0 ]
get [ ^balance ]
]
Account class extend [
new [ ^ (super new init) ]
]
st> Account new get
0