2012-10-10 30 views
3

有沒有辦法「重置」IronScheme引擎? 我基本上旨在確保連續調用string.Eval()是獨立執行的。重置C程序中的IronScheme引擎#

例如,我想執行

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

然後復位,並有通話

"(+ x 3.0)".Eval()

失敗,因爲它會如果它自行執行。

更好的辦法是讓n個併發線程中的每一個都有自己的獨立空間來執行。

回答

2

你有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(); 
+1

偉大的東西,那做的伎倆。謝謝! – pcbulldozer

+0

@pcbulldozer:沒問題:)讓我知道你是否有更多問題。 – leppie