Next: , Previous: , Up: User-defined Defining Words   [Contents][Index]


6.10.10.1 User-defined defining words with colon definitions

既存の定義ワードを定義時(defining-time)コードで取り囲み、 その取り囲んだ一連のコードをコロン定義に入れることで、 新しい定義ワードを作成できます。

たとえば、 定義の xt を指定してコロン定義に関する統計を収集するワード stats があり、 アプリケーション内のすべてのコロン定義で stats を呼び出す必要があるとします。 これには、 以下のように : の新しいバージョンを定義して使用できます:

: stats
  ( xt -- ) DUP ." (Gathering statistics for " . ." )"
  ... ;  \ other code

: my: : latestxt postpone literal ['] stats compile, ;

my: foo + - ;

my: を使用して foo を定義する場合、 以下のステップが実行されます:

see を使用すると、 my: を使用して定義されたワードを逆コンパイルし、 それが通常の : 定義とどのように異なるかを確認できます。 例:

: bar + - ;  \ like foo but using : rather than my:
see bar
: bar
  + - ;
see foo
: foo
  `foo stats + - ;

`foo['] foo を記述する別の方法です。


Footnotes

(15)

厳密に言えば、 compile,xt をコード領域内の何かに変換するために使用するメカニズムは実装に依存します。 スレッド実装は実行トークンを直接吐き出す場合がありますが、 別の実装はネイティブ・コード・シーケンスを吐き出す場合があります