CREATE..DOES> ¶あなたは、 この機能をどのように使用するのか不思議に思うかもしれません。 いくつかの使用パターンを以下に示します:
とあるコードのフレーズが複数回出現し、 その意味を同一視できる場合は、 それをコロン定義としてくくり出します。 類似のコロン定義が見つかった場合は、
CREATE..DOES> を使用してそれらをファクタリングできます。 たとえば、 アセンブラは通常、
非常によく似たいくつかのワードを定義します:
: ori, ( reg-target reg-source n -- )
0 asm-reg-reg-imm ;
: andi, ( reg-target reg-source n -- )
1 asm-reg-reg-imm ;
これは以下のようにファクタリングできます:
: reg-reg-imm ( op-code -- )
CREATE ,
DOES> ( reg-target reg-source n -- )
@ asm-reg-reg-imm ;
0 reg-reg-imm ori,
1 reg-reg-imm andi,
CREATE..DOES> の別の観点は、
これをワードのパラメーターの一部を提供する素朴な方法(関数型言語コミュニティではカリー化(currying)として知られています)とみなすことです。
たとえば、 + には 2 つのパラメーターが必要ですが、そのうち 1 つのパラメーターを固定した +
のバージョンを作成するには、 以下のようにします:
: curry+ ( n1 "name" -- )
CREATE ,
DOES> ( n2 -- n1+n2 )
@ + ;
3 curry+ 3+
-2 curry+ 2-