2011-07-28 57 views
5

正如标题所说我whant改变我在Java变量从我的JRuby的代码从JRuby代码更改java变量?

更具体地讲,我有在其中有没有价值但我的Java代码的整数,我whant我的JRuby的代码给这个变量的价值,但我不知道如何做到这一点。

这是我在多大程度上得到了与JRuby的代码..

require 'java' 
puts "Set player health here" 
playerHealth = 3 # Setting player health here! 

但还没有写在Java中任何东西。这是几乎所有我迄今为止..

+0

看看这个。 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“ –

+0

你打算从jruby调用java,还是从java调用jruby?另外,为什么不同的组件会混淆其他变量?即使在单一语言中,这可能也不是一个好主意。为什么不用方法调用的返回值设置变量? – Rob

+0

我不知道该怎么做。 – Rakso

回答

2

据我所知,您尝试调用从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以了解更多详细信息。