有没有办法“重置”IronScheme 引擎?
我的本质目标是确保对 string.Eval() 的连续调用是独立执行的。
例如,我想被执行
"(define x 1.0) (+ x 5.0)".Eval()
然后重置并通话
"(+ x 3.0)".Eval()
失败就像它自己执行一样。
更好的方法是为每个并发线程提供自己独立的执行空间。
对于 REPL,您有 2 个选项(对于库,它甚至不允许您编写此类代码;p)。
1:重置交互环境。
这可以通过以下方式完成(interaction-environment (new-interaction-environment))
.
Sample:
> (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 在线评估器 http://eval.ironscheme.net.
Sample:
"(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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)