有人能说我,我应该如何在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代码中使用该属性的新值。
非常感谢!
答案 0 :(得分:1)
第二个例子展示了如何在Java和Ruby之间共享变量。在此示例中,共享局部变量“x”。 [...]
示例2:
ScriptingContainer container = new ScriptingContainer(); container.put("x", 12345); container.runScriptlet("puts x.to_s(2)");
答案 1 :(得分: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);