メソッドの定義を、 クラスや、そのセレクターや、 フィールドや、 インスタンス変数、 の定義とは別に行う、 つまり、 実装を定義から分離することもできます。 これは以下の方法で行うことができます:
graphical class
inst-value radius
end-class circle
... \ do some other stuff
circle methods \ now we are ready
m: ( x y circle -- )
radius draw-circle ;m
overrides draw
m: ( n-radius circle -- )
[to-inst] radius ;m
overrides construct
end-methods
複数の methods...end-methods セクションを使用できます。
これらのセクションでクラスに対して実行できることは、 メソッドの定義とクラスのセレクターのオーバーライドのみです。
新しいセレクターやフィールドを定義してはいけません。
注意: 多くの場合、 セレクターを使用する前にオーバーライドする必要があることに注意してください。 特に、 heap-new
とその他のメソッドを呼び出す前に、 通常は construct を新しいメソッドでオーバーライドする必要があります。 たとえば、
上記例の overrides construction シーケンスの前に circle を作成してはなりません。