假设我在某个地方存储了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-WORDLIST
或FIND-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