g在Forth中执行一个字符或字符串,就好像它是一个单词一样



假设我在某个地方存储了s" Hello"。并且我还定义了CCD_ 2。有没有一种方法可以像执行单词一样执行字符串?

我已经阅读了文档,但找不到任何相关的功能。这可能是显而易见的,但遗憾的是,我无法解决。

NB:EVALUATE解释(翻译(字符串。这意味着在编译状态下,您的"Hello"将被编译。例如:

: foo s" hello" evaluate ;
: [foo] foo ; immediate

: hello ." something" ;
: bar [foo] ;  "hello" will be compiled into bar
bar  will execute hello

另一种方法是使用SEARCH-WORDLISTFIND-NAME单词,例如:

s" hello" find-name dup ?nf name> execute

何处

find-name ( c-addr u -- nt|0 )  returns a name token nt or 0
?nf ( nt|0 -- )  throws an exception on zero, i.e. not found
name> ( nt -- xt )

最后两个可以在Gforth中定义为

: ?nf ( x|0 -- ) if exit then -13 throw ;
: name> ( nt -- xt|0 )
dup name>interpret swap name>compile drop over = if exit then drop 0
;

这适用于我的系统。

s" Hello" EVALUATE

相关内容

  • 没有找到相关文章

最新更新