我有一个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
,这是原始值。
有没有办法获得新的变量值?
答案 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是这样你可以为不同的输入使用相同的编译脚本