【メソッドをより便利に】通常、 メソッドでは受信オブジェクト(receiving object)に頻繁にアクセスします。
メソッドをプレーンなコロン定義(:noname など)として定義する場合、 多くのスタック体操が必要になる場合があります。
これを回避するには、 m: ... ;m を使用してメソッドを定義します。たとえば、 以下を使用して circle を
draw するメソッドを定義できます
m: ( x y circle -- ) ( x y ) this circle-radius @ draw-circle ;m
このメソッドが実行されるときは、 受信オブジェクト(receiver object)(上記例の circle)がスタックから取り除かれます。
その代わりに、 m: 〜 ;m の間は this を使用して受信オブジェクトにアクセスできます(ええ、 確かに、この例では
m: ... ;m を使用する利点ないかもしれませんね)。 注意: しかし、 スタック・コメントとしては m: と
;m の間のコードだけでなく、 メソッド全体(つまり、
受信オブジェクトを含むメソッド全体)のスタック効果を指定していることに注意してください。 なお、 m:...;m では
exit を使用できません。 代わりに、 exitm を使用してください32。
あなたは this "field" という形式のシーケンスを頻繁に使用するハメになると思います(上記例では: this
circle-radius)。 そこで、 この方法でのみフィールドを使用する場合は、 inst-var を使用してフィールドを定義し、
フィールド名の前の this を削れます。 たとえば、 上記例の circle クラスは以下のように定義することもできます:
graphical class
  cell% inst-var radius
  m: ( x y circle -- )
    radius @ draw-circle ;m
  overrides draw
  m: ( n-radius circle -- )
    radius ! ;m
  overrides construct
end-class circle
radius は、 circle や、 その子孫クラスと、 それらの m:...;m 内でのみ使用できます。
inst-value を使用してフィールドを定義することもできます。 これは、 variable に対して
value があるのと同様に、 inst-var に対して inst-value があるのです。
このようなフィールドの値は [to-inst] を使用して変更できます。  たとえば、 クラス circle
を以下のように定義することもできます:
graphical class
  inst-value radius
  m: ( x y circle -- )
    radius draw-circle ;m
  overrides draw
  m: ( n-radius circle -- )
    [to-inst] radius ;m
  overrides construct
end-class circle
さらに、
catch を呼び出すワードや、 objects.fs をロードする前に定義されているワードについては、
catch を再定義したように、  これらも再定義する必要があります: : catch this >r catch r>
to-this ;