Возврат выходного значения из кода JavaScript в Java с использованием Nashorn

#javascript #java #scriptengine

#javascript #java #scriptengine

Вопрос:

У меня есть этот короткий код здесь

  ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");

        String foo = "print(2);";

        Object s =engine.eval(foo);

        System.out.println(s); // printing null
 

Чего я пытаюсь добиться, так это того, что я хочу, чтобы результат, который engine.eval(foo) напечатает, чтобы сохранить его в строковой переменной, значение примера должно быть 2, как я могу понять, что в этом случае engine.val(foo) ничего не возвращает.

Ответ №1:

Основная причина вашей проблемы заключается в том, что print() функция Javascript не возвращает значение (в TypeScript это было бы function print(): void ). Итак, ваш код работает просто отлично (вы действительно можете видеть 2 , что он печатается в стандартном выводе), но возвращаемое значение print(2); которого void интерпретируется как null .

Если вы вызовете функцию (или оператор), которая возвращает значение, она будет работать просто отлично:

         ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");

        String foo = "x = 1 2;";

        Object s = engine.eval(foo);
        System.out.println(s); // printing 3
 

Вы также можете использовать переменные для обработки результатов:

         ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");

        String jsCode = "jsVar = 1 2;";

        engine.eval(jsCode);
        Object javaVar = engine.get("jsVar");

        System.out.println(javaVar); // printing 3