2011-07-28 11 views
5

Jak mówi tytuł i whant zmienić swoje zmienne w Javie z mojego kodu jrubyzmienić zmienne java z kodu JRuby?

Aby być bardziej szczegółowe i mają całkowitą w moim kodu Java, który ma jeszcze żadnej wartości, a ja whant z mojego kodu jruby dać tej zmiennej An wartość, ale nie mam pojęcia, jak to zrobić.

To jak daleko mam z kodem jruby ..

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

Ale jeszcze nie napisał niczego w Javie. To jest dość dużo wszystko mam tak daleko ..

+0

Sprawdź to. http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby. Na przykład >> java.lang.System.setProperty "myprop", "123" => zero >> java.lang.System.getProperty "myprop" java.lang.System.getProperty "myprop" => " 123 " –

+0

Czy zamierzasz wywołać java z jruby, lub wywołać jruby z Java? Dlaczego różne składniki mieszają się ze zmiennymi eachothers? To prawdopodobnie nie jest dobry pomysł nawet w jednym języku. Dlaczego nie ustawić zmiennej z wartością zwracaną z wywołania metody? – Rob

+0

Nie wiem, jak to zrobić .. – Rakso

Odpowiedz

2

Z tego co rozumiem, którą próbujesz wywołać silnik JRuby z Java, więc można zrobić coś tak zmodyfikować zmienną Java w JRuby:

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(); 
     } 
    } 
} 

Należy zauważyć, że w skrypcie playerHealth jest zmienną globalną.

Zapoznaj się z this link, aby uzyskać więcej informacji, jeśli chcesz wczytać zewnętrzny skrypt JRuby zamiast oceniać kod.