You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Forth语言中如何访问被重定义操作遮蔽的旧单词定义?

Forth单词重定义后访问旧版本的方法

完全可以实现你要求的效果。Forth重定义单词时只会在字典头部新增同名的新条目,旧定义仍然完整保留在字典中,只是默认搜索时会优先匹配最新的同名条目,只要提前留存旧定义的引用就能正常访问、查看。

你给出的示例本身就已经用到了旧定义的调用逻辑:第二个foo定义内部调用的foo就是首个版本的定义,因为Forth编译时会按当前字典顺序查找单词,重定义过程中新的foo还没有被加入字典,所以内部调用自动匹配到旧版本,这也是你执行10 foo .得到21的原因。

实现second-foo的具体方法

只需要在重定义foo之前,先给旧版本绑定一个新的单词名即可,完整可运行示例如下:

\ 定义首个版本的foo
: foo ( n -- 2*n ) 2* ;  ok
\ 重定义前留存旧版本,命名为second-foo
: second-foo foo ;  ok
\ 重定义foo为新版本
: foo ( n -- 2*n+1 ) foo 1+ ; redefined foo   ok

\ 测试运行效果
10 foo . 21  ok
21 second-foo . 42  ok

查看旧定义内容的方法

直接对留存的second-foo执行see指令即可,多数Forth实现会直接展开显示旧定义的原始逻辑,和你要求的输出完全一致:

see second-foo
: foo
  2* ; ok

如果需要更严谨的命名空间隔离,也可以使用Forth的单词表(wordlist)机制把旧定义存到独立的单词表中,查看时切换到对应单词表即可。

内容的提问来源于stack exchange,提问作者pmg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:27:03