Forth 中的词重定义

Word redefinition in Forth

在 Forth 中,如果重新定义单词,使用重新定义的单词的另一个单词的预期行为是什么? 例如如果 x 调用 y:

: Y ." Old Y " CR ;
: X 10 0 DO Y LOOP ;
\ ... 
: Y ." New Y " ;

那么Y重新定义后,XOld YNew Y应该输出什么?

简短的回答:X 将输出 Old Y,另请参阅 online test 中的示例。第二次定义Y的时候,X已经编译好了。

在 Forth 中,重新定义只是隐藏:当一个新定义的名称隐藏在同一个词列表中的另一个名称时,隐藏的定义变得无法通过该名称访问(无法找到)。

Forth 还使用增量编译和静态 name resolution(在编译时执行)。因此,新定义不会影响任何以前的定义(以及已经编译的代码)。