2011-07-28 109 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以瞭解更多詳細信息。