小编con*_*ext的帖子

如何制作上下文感知代码评估器

我正在从这里这里查看类似于 REPL 的代码评估,并尝试为其制作一个非常小的版本,但它失败了:

\n
use nqp;\n\nclass E {\n\n    has Mu $.compiler;\n    has $!save_ctx;\n\n    method evaluate(@fragments) {\n        for @fragments -> $code {\n            my $*MAIN_CTX;\n            my $*CTXSAVE := self;\n\n            $!compiler.eval($code,\n                            outer_ctx => nqp::ctxcaller(nqp::ctx()));\n\n            if nqp::defined($*MAIN_CTX) {\n                $!save_ctx := $*MAIN_CTX;\n            }\n        }\n    }\n\n    method ctxsave(--> Nil) {\n        say "*in ctxsave*";\n        $*MAIN_CTX := nqp::ctxcaller(nqp::ctx());\n        $*CTXSAVE := 0;\n    }\n\n}\n\nmy $e := E.new(compiler => nqp::getcomp("Raku"));\nnqp::bindattr($e, E, \'$!save_ctx\', nqp::ctx());\n$e.evaluate: (\'say my @vals = 12, 3, 4;\', \'say @vals.head\');\n
Run Code Online (Sandbox Code Playgroud)\n

我从上面的链接中拼凑而成,但不太知道我在做什么:)运行时,会发生这种情况:

\n
*in ctxsave*\n[12 3 …
Run Code Online (Sandbox Code Playgroud)

raku

6
推荐指数
1
解决办法
85
查看次数

标签 统计

raku ×1