在Forth,如果我打电话给DOES>会发生什么?两次?

时间:2015-08-08 20:31:36

标签: forth

约翰海耶斯' ANS Forth测试套件包含如下所示的测试:

: WEIRD: CREATE DOES> 1 + DOES> 2 + ; 
WEIRD: W1
W1

我真的不知道应该做些什么。 DOES> DOES>基本上是不可穿透的。

通过阅读测试套件,看起来它希望第一次调用W1来修改W1,但是调用DOES>会激活 CREATE。我假设第二个对最近一次调用DOES>所定义的单词进行操作,但这已经var access_token; var promise = driver.findElement(webdriver.By.name("AccToken")).getText(); promise.then(function(text) { access_token = text; }); ,所以我不确定那个'应该做的。

gforth通过了测试套件,因此测试似乎确实有效;但我的宠物Forth翻译并不是,我需要弄清楚如何使它工作......

1 个答案:

答案 0 :(得分:6)

第二次调用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>始终对最新定义的单词进行操作。