1

谁能告诉我,我应该如何在 JRuby 脚本中使用现有的 Java 对象?

我知道如何在 JRuby 中创建 Java 类的新实例,但就我而言,我已经有一个 Java 实例,我想在我的 JRuby 脚本中检查/修改它的一些属性。

//Java

public class MyClass 
{
private int size;

public int getSize() {
    return size;
}

public void setSize(int size) {
    this.size = size;
}
}

//...

MyClass myClass = new MyClass();
myClass.setSize(5);

//...

String script = "..????.."
ScriptingContainer rubyContainer = new ScriptingContainer();
rubyContainer.runScriptlet(script);

我应该在脚本变量中写入什么来检查和修改 size 属性,如下所示:

if (myClass.getSize() > 3)
    myClass.setSize(10)
else
    myClass.setSize(0);

修改后,我希望能够在我的 Java 代码中使用该属性的新值。

非常感谢!

4

2 回答 2

1

直接来自ScriptingContainer的 javadoc

第二个示例展示了如何在 Java 和 Ruby 之间共享变量。在此示例中,共享了一个局部变量“x”。[...]

示例 2:

    ScriptingContainer container = new ScriptingContainer();
    container.put("x", 12345);
    container.runScriptlet("puts x.to_s(2)");
于 2012-12-15T16:11:48.407 回答
1

问题已解决,非常感谢您的帮助!

设置“LocalVariableBehavior.PERSISTENT”以便能够在多次评估期间使用该对象非常重要。处理完脚本后,Java 代码中对象的值与 JRuby 脚本中的值相同。

//Java

rubyContainer = new ScriptingContainer(LocalVariableBehavior.PERSISTENT);
rubyContainer.put("myClass", myClass);

String script = 
    "if myClass.getSize() > 3 then " +
    "myClass.setSize(10) " +
    "else " +
    "myClass.setSize(0)" +
    "end";

rubyContainer.runScriptlet(script);
于 2012-12-15T18:40:34.683 回答