重置C#中的IronScheme引擎



有办法"重置"IronScheme引擎吗?我的主要目标是确保连续调用字符串。Eval()是独立执行的。

例如,我想执行

"(define x 1.0) (+ x 5.0)".Eval()

然后重置,并调用

"(+ x 3.0)".Eval()

失败,就像它自己执行一样。

更好的方法是为n个并发线程中的每个线程提供自己独立的执行空间。

您有两个REPL选项(对于库,它甚至不允许您编写这样的代码;p)。

1:重置交互环境

这可以通过(interaction-environment (new-interaction-environment))来完成。

样品:

> (define x 5) (+ x 5)
10
> (interaction-environment (new-interaction-environment))
> (+ x 5)
Unhandled exception during evaluation:
&undefined
&message: "attempted to use undefined symbol"
&irritants: (x)

2:创建一个新的交互环境,您可以在C#中使用它

如果您想要并发环境,这可能是最好的选择。我在IronScheme在线评估中使用了这种方法。

样品:

"(define x 1.0) (+ x 5.0)".Eval();
var env = "(new-interaction-environment)".Eval();
"(+ x 3.0)".EvalWithEnvironment(env);

可能的解决方案:

Func<object> reset = 
"(lambda () (interaction-environment (new-interaction-environment)))".
Eval<Callable>().Call;
"(define x 1.0) (+ x 5.0)".Eval();
reset();
"(+ x 5.0)".Eval();

最新更新