在编译的单词中编译匿名单词



我目前正在研究一个用Forth编写的小型解释器。为了进行一个小的优化,我正在尝试使用一个创建编译单词的单词。例如,行为如下:

: creator ( -- a )
    :noname ( u -- u )
        10 + ;
;
10 creator execute .
>> 20 ok

到目前为止,我尝试了几种方法,但没有奏效(像上面一样幼稚,在解释模式下切换,尝试编译一串 Forth 源代码)。这真的可能吗?

当你编写编译词时,你必须非常小心哪些字在编译时执行,哪些词在运行时执行。 在这种情况下,10 +在编译时运行,并且不会被编译到你 :noname 定义中。

我相信这就是你想要的:

: creator ( -- xt )   :noname ( n1 -- n2 )
   10 postpone literal  postpone +  postpone ; ;

另请注意,在许多情况下,您可以使用 CREATE DOES>。 例如,如果您希望您的creator接受子单词使用的数字:

: creator ( n1 "name" -- )   create ,
   does> ( n2 -- n1+n2 )   @ + ;

相关内容

  • 没有找到相关文章