无法从IronRuby更新变量值

时间:2014-09-02 00:30:42

标签: c# ruby scripting ironruby

我一直在尝试将Ruby嵌入到我正在编写的C#程序中。 我可以执行脚本,但我遇到了互操作问题。 我似乎无法从Ruby中提取变量。

让我们考虑以下事项:

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(本地和全局)中创建一个变量并将其读出来,但它似乎永远不会存在。

我有点卡住,任何帮助都会被贬低。

1 个答案:

答案 0 :(得分: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");

这适合我。