2014-09-02 69 views
1

我一直在嘗試在我正在編寫的C#程序中嵌入Ruby。 我可以執行腳本,但是我遇到了interop問題。 我似乎無法從Ruby中提取變量。無法從IronRuby更新變量值

讓我們考慮以下幾點:

String before = "hello world"; 
String after = "changed"; 
ScriptRuntime mRuntime = Ruby.CreateRuntime(); 
ScriptEngine mEngine = mRuntime.GetEngine("ruby"); 
ScriptScope scope = mEngine.CreateScope(); 
String code = "p msg\nmsg = '" + after + "'"; 
ScriptSource script = mEngine.CreateScriptSourceFromString(code, SourceCodeKind.Statements); 
scope.SetVariable("msg", before); 
script.Execute(scope); 
String result = scope.GetVariable("msg"); 

(本來這是用TryGetVariable實現)

在我的單元測試我設置的結果斷言==「改變」,但它承載它的默認值。 我也嘗試在Ruby(本地和$全局)中創建一個變量並閱讀它,但它似乎永遠不存在。

我有點卡住了,任何幫助都會被推定。

回答

0
String before = "hello world"; 
String after = "changed"; 

ScriptRuntime mRuntime = Ruby.CreateRuntime(); 
ScriptEngine mEngine = mRuntime.GetEngine("ruby"); 
ScriptScope scope = mEngine.CreateScope(); 
String code = "self.msg = '" + after + "'.to_clr_string"; 
ScriptSource script = mEngine.CreateScriptSourceFromString(code, SourceCodeKind.Statements); 
scope.SetVariable("msg", before); 
script.Execute(scope); 
String result = scope.GetVariable("msg"); 

這對我有用。

+0

This Works。 IronRuby可以使用更好的文檔進行互操作。 – plasmarobo 2014-09-29 21:36:16