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され、コンソールに出力されますが、これで問題ありません。

ただし、上記のコードの後に​​次の行を追加してみました。

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 に答える