3
有沒有辦法「重置」IronScheme引擎? 我基本上旨在確保連續調用string.Eval()是獨立執行的。重置C程序中的IronScheme引擎#
例如,我想執行
"(define x 1.0) (+ x 5.0)".Eval()
然後復位,並有通話
"(+ x 3.0)".Eval()
失敗,因爲它會如果它自行執行。
更好的辦法是讓n個併發線程中的每一個都有自己的獨立空間來執行。
有沒有辦法「重置」IronScheme引擎? 我基本上旨在確保連續調用string.Eval()是獨立執行的。重置C程序中的IronScheme引擎#
例如,我想執行
"(define x 1.0) (+ x 5.0)".Eval()
然後復位,並有通話
"(+ x 3.0)".Eval()
失敗,因爲它會如果它自行執行。
更好的辦法是讓n個併發線程中的每一個都有自己的獨立空間來執行。
你有2個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 online evaluator。
樣品:
"(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();
偉大的東西,那做的伎倆。謝謝! – pcbulldozer
@pcbulldozer:沒問題:)讓我知道你是否有更多問題。 – leppie