Next: , Previous: , Up: Defining Words   [Contents][Index]


6.10.7 Anonymous Definitions

しばしば匿名のワード(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 は、 最後に定義されたワードの実行トークンです。

先の例を、 nonamelatestxt を使用して書き直すことができます:

Defer deferred
noname : ( ... -- ... )
  ... ;
latestxt IS deferred

noname は、 : だけでなく、 あらゆる定義ワードで機能します。

latestxt は、 最後のワードが noname として定義されていない場合にも機能します。 ただし、 複合ワード(combined words)には機能しません。 また、 これは、 定義のヘッダーが構築されるやいなや有効になる便利なプロパティでもあります。 したがって、 以下のようにすると:

latestxt . : foo [ latestxt . ] ; ' foo .

これは3つの数値を出力: 後ろの2つは同一の数値です。