2

JRuby (1.6.7.2) フレームワークの JSR 223 javax.script インターフェイスは、ScriptContext のバインディングでバインドされた Java 値を無視するようです。私は間違いを犯しますか?動作しない簡単な例を次に示します。

private void run() throws ScriptException {
    ScriptEngine engine = new JRubyEngineFactory().getScriptEngine();
    LittleClass l = new LittleClass();
    engine.put("l", l);
    engine.eval("l.x;");
}

public class LittleClass {
    public int x;
    public void add() {
        x = x + 1;
    }
}

それとも既知の問題ですか?

4

1 に答える 1

3

デフォルトでは、ローカル変数は複数の評価にまたがって存続しません。参照: http://kenai.com/projects/jruby/pages/RedBridge

この動作を変更するには、org.jruby.embed.localvariable.behaviorプロパティを設定します。

    System.setProperty("org.jruby.embed.localvariable.behavior", "persistent");

    ScriptEngine engine = new JRubyEngineFactory().getScriptEngine();
    LittleClass l = new LittleClass();
    engine.put("l", l);
    engine.eval("l.add");
    System.out.println(engine.eval("l.x"));
于 2013-03-11T15:36:09.080 に答える