John Hayes 的 ANS Forth 测试套件包含如下所示的测试:
: WEIRD: CREATE DOES> 1 + DOES> 2 + ;
WEIRD: W1
W1
我不知道这到底应该做什么。 ANS Forth Specification在
DOES>
基本上是无法穿透的。从阅读测试套件来看,它似乎期待第一次调用
DOES>
修改W1
,但随后调用 W1
激活第二个 DOES>
.我假设第二个对最近一次调用 CREATE
定义的单词进行操作。 ,但那已经是 DOES>
ified,所以我不确定那应该做什么。gforth 通过了测试套件,所以测试似乎是有效的;但我的宠物 Forth 解释器没有,我需要弄清楚如何让它工作......
最佳答案
第二次调用DOES>
还修改了W1
.WEIRD:
创建 W1
运行时操作为 1 + DOES> 2 +
.第一次调用W1
将运行时设置为 2 +
.
如果您更改代码以打印某些内容,则这一点会更加明显,例如
: weird: create does> drop ." ONE" does> drop ." TWO" ; ok
weird: w1 ok
w1 ONE ok
w1 TWO ok
w1 TWO ok
w1 TWO ok
对此的解释是
DOES>
总是对最新定义的词进行操作。
关于forth - 在 Forth 中,如果我调用 DOES> 两次会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31898277/