ドキュメントにある 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 Documentationから引用しました。
誰かがエラーを見つけるのを手伝ってくれますか? おそらくinit
superのメソッドが呼び出されていると思いましたが、メソッドがObject
ありませんinit
。さらにsuper
、現在のクラスのインスタンスを作成する必要がありますか?
答えてくれてありがとうベンジャミン
So my problem was that i did not distinguish between class functions (new
) and Object functions
Fixed Code
Object subclass: Account [
| balance |
init [ balance := 0 ]
get [ ^balance ]
]
Account class extend [
new [ ^ (super new init) ]
]
st> Account new get
0