2011-07-28 5 views
5

내가 내 JRuby를 코드에서 자바 내 변수를 변경 whant 말한다JRuby 코드에서 Java 변수를 변경 하시겠습니까? 제목으로

나는 아직 값이없는 내 자바 코드의 정수를, 그리고 난 내 JRuby를 코드 whant이 변수을 제공 구체적으로는 가치,하지만 어떻게 해야할지 모르겠다.

이것은 내가 JRuby에서 코드를 가지고 얼마나 멀리입니다 ..

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

는 그러나 아직 자바에서 아무것도 작성하지 않았습니다. 이것은 모든 내가 지금까지이 꽤 많이있다 ..

난 당신이 JRuby를 사용하는 Java 변수를 수정하려면이 같은 일을 할 수 있도록, 당신은 자바에서 JRuby를 엔진을 호출하려고하는 이해하는 것과
+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

:

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을 확인하십시오.

관련 문제