#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