检索修改后的变量值

时间:2012-06-03 19:03:55

标签: c# ironruby dynamic-language-runtime

我有一个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到控制台,这没关系。

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

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

并输出11,这是原始值。

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

2 个答案:

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

答案 1 :(得分:0)

Setvariable是改变输入

e.g。

如果你有y = y + 1

在DLR之前你会让你的剧本'y = 11',然后是'y = y + 1' 如果你想在y = 15时再次运行它,那么你可以构建一个新的脚本,将y初始化为15,然后再次解释它。

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