2011-07-28 13 views
5

Como el título dice i whant cambiar mis variables en Java desde mi código jruby¿Cambiar las variables de Java del código JRuby?

Para ser más específicos tengo un número entero en mi código de Java que no tiene valor todavía, y whant con mi código JRuby doy esta variable una valor, pero no tengo idea de cómo hacer esto.

Esto es lo lejos que me dieron con el código JRuby ..

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

pero aún no han escrito nada en Java. Esto es más o menos todo lo que tengo hasta ahora ..

+0

Mira esto. http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby. Por ejemplo >> java.lang.System.setProperty "myprop", "123" => nil >> java.lang.System.getProperty "myprop" java.lang.System.getProperty "myprop" => " 123 " –

+0

¿Planeas llamar a Java desde jruby, o llamar a jruby desde Java? Además, ¿por qué los diferentes componentes están jugando con las otras variables? Probablemente no sea una buena idea, incluso en un solo idioma. ¿Por qué no establecer su variable con el valor de retorno de una llamada a método? – Rob

+0

No sé cómo hacer eso tampoco .. – Rakso

Respuesta

2

Por lo que entiendo, usted está tratando de invocar el motor JRuby desde Java, por lo que podría hacer algo como esto para modificar una variable de Java en 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(); 
     } 
    } 
} 

Tenga en cuenta que en el script playerHealth es una variable global.

Consulte this link para obtener más información si desea cargar un script JRuby externo en lugar de evaluar el código.

Cuestiones relacionadas