2
単語の再定義の場合、再定義された単語を使用する別の単語の予想される動作は何ですか? x
はy
を呼び出す場合:Forthでの単語の再定義
: Y ." Old Y " CR ;
: X 10 0 DO Y LOOP ;
\ ...
: Y ." New Y " ;
その後、Y
の再定義の後、何がX
、Old Y
またはNew Y
の出力すべきですか?
単語の再定義の場合、再定義された単語を使用する別の単語の予想される動作は何ですか? x
はy
を呼び出す場合:Forthでの単語の再定義
: Y ." Old Y " CR ;
: X 10 0 DO Y LOOP ;
\ ...
: Y ." New Y " ;
その後、Y
の再定義の後、何がX
、Old Y
またはNew Y
の出力すべきですか?
短い答え:X
はOld Y
を出力します。online testの例も参照してください。 Y
が2回目に定義された時点で、X
は既にコンパイルされています。
新しい定義の名前が同じ単語リスト内の別の名前を陰にし、この名前で陰影付きの定義にアクセスできない(unfindable)となる場合があります。
また、Forthはインクリメンタルコンパイルとスタティックname resolution(コンパイル時に実行される)を使用します。その結果、新しい定義は以前の定義(および既にコンパイルされたコード)に影響を与えません。
FWIWでは、何らかの "多態性"の振る舞いが望まれる場合、Forthがそれらをサポートしている場合、 'DEFER'と' IS'を使うことができます。 –
はい。いずれの場合でも、変数を使用して同じ結果を得ることができます。 – ruvim