据我所知,您尝试调用从Java JRuby的引擎,所以你可以做这样的事情修改JRuby的Java变量:
import javax.script.*;
public class EvalJRubyScript {
public static void main(String[] args) throws Exception {
ScriptEngineManager factory = new ScriptEngineManager();
int playerHealth = 0;
ScriptEngine engine = factory.getEngineByName("jruby");
ScriptContext context = engine.getContext();
context.setAttribute("playerHealth", playerHealth, ScriptContext.ENGINE_SCOPE);
try {
engine.eval("$playerHealth = 42");
playerHealth = (Integer)context.getAttribute("playerHealth", ScriptContext.ENGINE_SCOPE);
System.out.println(playerHealth);
} catch (ScriptException exception) {
exception.printStackTrace();
}
}
}
请注意,在脚本playerHealth
是一个全局变量。
如果要加载外部JRuby脚本而不是评估代码,请查看this link以了解更多详细信息。
看看这个。 http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby。例如>> java.lang.System.setProperty“myprop”,“123” => nil >> java.lang.System.getProperty“myprop” java.lang.System.getProperty“myprop” =>“ 123“ –
你打算从jruby调用java,还是从java调用jruby?另外,为什么不同的组件会混淆其他变量?即使在单一语言中,这可能也不是一个好主意。为什么不用方法调用的返回值设置变量? – Rob
我不知道该怎么做。 – Rakso