使用 Nashorn 从 Java Java 中的脚本代码返回输出值
Returning output value from JavaScript code in Java using Nashorn
我这里有这个短代码
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) 将打印的结果保存在字符串变量示例中 s 值应该是 2,在这种情况下我如何实现它engine.val(foo) 没有返回任何东西。
问题的根本原因是 Javascript 的 print()
函数没有 returning 一个值(在 TypeScript 中它是 function print(): void
)。所以你的代码工作得很好(你实际上可以看到 2
在 stdout 中打印)但是 print(2);
的 return 值 void
被解释为 null
.
如果您调用 returns 值的函数(或语句),它将正常工作:
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
我这里有这个短代码
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) 将打印的结果保存在字符串变量示例中 s 值应该是 2,在这种情况下我如何实现它engine.val(foo) 没有返回任何东西。
问题的根本原因是 Javascript 的 print()
函数没有 returning 一个值(在 TypeScript 中它是 function print(): void
)。所以你的代码工作得很好(你实际上可以看到 2
在 stdout 中打印)但是 print(2);
的 return 值 void
被解释为 null
.
如果您调用 returns 值的函数(或语句),它将正常工作:
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