3

我有一个 IronRuby 脚本,它通过ScriptScope.

我想在修改后检索变量的值,但我得到了旧值。

这是我的代码:

var engine = Ruby.CreateEngine();
var scope = engine.Runtime.CreateScope();

scope.SetVariable("y", 11);

var source = engine.CreateScriptSourceFromString("y=33; puts y;", SourceCodeKind.Statements);
source.Execute(scope);

上面的代码执行并输出33到控制台,就OK了。

但是,我尝试在上述代码之后添加以下行:

Console.WriteLine(scope.GetVariable("y"));

它输出11,这是原始值。

有没有办法获得新的变量值?

4

2 回答 2

1

使用 IronPython,为了检索一个值,我使用这样的代理对象。

public class ScriptProxy
{
    private int _result;

    public int Result
    {
        get { return this._result; }
        set { this._result = value; }
    }
}

我调用 SetVariable 来传递 ScriptObject 的一个实例:

ScriptEngine pyEngine = Python.CreateEngine();
ScriptScope pyScope = pyEngine.CreateScope();

ScriptProxy proxy = new ScriptProxy();
pyScope.SetVariable("proxy", proxy);

在您的脚本中,您可以设置结果:

proxy.Result=33;
于 2012-06-04T09:28:18.390 回答
0

Setvariable是改变输入

例如

如果你有 y = y + 1

在 DLR 之前,您会先制作脚本“y = 11”,然后是“y = y + 1”,如果您想再次运行 y = 15,您将构建一个新脚本,将 y 初始化为 15,然后它会被再次解释。

发生的事情是 y = 33 被 y = 11 取代,setvariable 是这样您可以对不同的输入使用相同的编译脚本

于 2012-06-03T19:29:47.397 回答