しばしば匿名のワード(anonymous word)を定義したい場合があります。 つまり、 名前無しのワードです。 これは以下のようにします:
:noname
( – xt colon-sys ) core-ext “colon-no-name”
これにより、 終わりの ;
の後にワードの実行トークンがスタックに残ります。 以下は、 defer された ワード(deferred
word)が匿名コロン定義(anonymous colon definition)の xt
で初期化される例です:
Defer deferred :noname ( ... -- ... ) ... ; IS deferred
Gforth は、 2 つの別々のワードを使用して、 これを行う別の方法を提供します:
noname
( – ) gforth-0.2 “noname”
次に定義するワードは匿名になります。
その定義するワードは(noname
がいじる訳ではなくて)入力ストリームからのをそのままを使います(The defining word
will leave the input stream alone)。 その定義したワードの xt は latestxt
で取得します。
latestxt
( – xt ) gforth-0.6 “latestxt”
xt は、 最後に定義されたワードの実行トークンです。
先の例を、 noname
と latestxt
を使用して書き直すことができます:
Defer deferred noname : ( ... -- ... ) ... ; latestxt IS deferred
noname
は、 :
だけでなく、 あらゆる定義ワードで機能します。
latestxt
は、 最後のワードが noname
として定義されていない場合にも機能します。 ただし、
複合ワード(combined words)には機能しません。 また、 これは、
定義のヘッダーが構築されるやいなや有効になる便利なプロパティでもあります。 したがって、 以下のようにすると:
latestxt . : foo [ latestxt . ] ; ' foo .
これは3つの数値を出力: 後ろの2つは同一の数値です。