Forth 中的词重定义
Word redefinition in Forth
在 Forth 中,如果重新定义单词,使用重新定义的单词的另一个单词的预期行为是什么?
例如如果 x
调用 y
:
: 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
的时候,X
已经编译好了。
在 Forth 中,重新定义只是隐藏:当一个新定义的名称隐藏在同一个词列表中的另一个名称时,隐藏的定义变得无法通过该名称访问(无法找到)。
Forth 还使用增量编译和静态 name resolution(在编译时执行)。因此,新定义不会影响任何以前的定义(以及已经编译的代码)。
在 Forth 中,如果重新定义单词,使用重新定义的单词的另一个单词的预期行为是什么?
例如如果 x
调用 y
:
: 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
的时候,X
已经编译好了。
在 Forth 中,重新定义只是隐藏:当一个新定义的名称隐藏在同一个词列表中的另一个名称时,隐藏的定义变得无法通过该名称访问(无法找到)。
Forth 还使用增量编译和静态 name resolution(在编译时执行)。因此,新定义不会影响任何以前的定义(以及已经编译的代码)。