изменить переменные Java из кода JRuby? - PullRequest
5 голосов
/ 29 июля 2011

Как видно из названия, я хочу изменить свои переменные в Java из моего кода Jruby

Чтобы быть более точным, в моем Java-коде есть целое число, которое еще не имеет значения, и я хочу, чтобы мой код JRuby дал этой переменной значение, но я понятия не имею, как это сделать.

Вот как далеко я продвинулся с кодом JRuby ..

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

Но я еще ничего не написал на Java. Это почти все, что я имею до сих пор ..

1 Ответ

2 голосов
/ 10 августа 2011

Насколько я понимаю, вы пытаетесь вызвать движок JRuby из Java, поэтому вы можете сделать что-то вроде этого, чтобы изменить переменную Java в 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();
        }
    }
}

Обратите внимание, что в скрипте playerHealth - глобальная переменная.

Проверьте эту ссылку для получения более подробной информации, если вы хотите загрузить внешний сценарий JRuby вместо оценки кода.

...