Forth中的单词重新定义

iva*_*d58 3 forth

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

: Y ." Old Y " CR ;
: X 10 0 DO Y LOOP ;
\ ... 
: Y ." New Y " ;
Run Code Online (Sandbox Code Playgroud)

那么在重新定义之后Y,应该输出什么X,Old Y或者New Y

ruv*_*vim 8

简短回答:X将输出Old Y,另请参阅在线测试中的示例.在Y第二次定义的时间,X已经编译.

在Forth中,重新定义只是阴影:当新定义的名称在同一个单词列表中隐藏另一个名称时,并且阴影定义变得无法访问(不可用)此名称.

Forth还使用渐进式编译和静态名称解析(在编译时执行).因此,新定义不会影响任何先前的定义(以及已编译的代码).

  • 是.在任何情况下,变量都可用于实现相同的结果. (2认同)