據我所知,您嘗試調用從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