java - 从 jdk8 中的脚本管理器返回值
问题描述
我一直在尝试下面的代码
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class ScriptCode {
public static void main(String[] args) throws Exception{
String code="";
int y=-1;
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
code="if(a<b){return b;}else{return a;}";
engine.put("a",10);
engine.put("b",100);
y=(int)engine.eval(code);
System.out.println(y);
}
}
我收到一条错误消息
Caused by: jdk.nashorn.internal.runtime.ParserException: <eval>:1:8 Invalid return statement
if(a<b){return b;}else{return a;}
我无法解决这个问题。问题是在我的用例中,“代码”变量将有一些规则,它们会返回一些东西。我知道如何在不返回的情况下做到这一点,但我无法从代码中返回一些值。我该怎么做?
解决方案
您应该声明一个函数,然后执行它,以获得结果
engine.eval("function max(a,b) { if(a<b){return b;} return a;}");
engine.put("a",10);
engine.put("b",100);
int y = (int)engine.eval("max(a,b)"); // will return function result
或将结果分配给变量,然后读取它
engine.put("a",10);
engine.put("b",100);
engine.eval("c= a<b? b: a;"); // assign result to a variable
int y = (int) engine.get("c"); // read the value
您有一个错误,因为您的 return 语句不在任何函数内,因此 return 无效。eval 类似于任何浏览器中的开发者工具控制台。您需要声明一个函数或一个变量。
推荐阅读
- discord.js - 验证机器人不添加角色
- javascript - 将文本文件动态读入页面
- excel - How to stack 2 columns of data with spaces into a single column with no spaces
- android - 到数组适配器的数据绑定仅适用于根文件夹中的模型
- excel - 如何使用变量自动过滤(WEEKNUM)
- html - 在 r Shiny 中将外部超链接添加到 tabPanel 或 navbarMenu
- javascript - 为缓存颜色值的函数设置 localstorage
- javascript - 从 Postgres DB 获取 PNG 文本并将图像发送到前端 React
- http - 电报:错误请求:未能获取 HTTP URL 内容:两个相似的链接:一个有效,一个无效
- ios - 为什么 MKCoordinateRegion 不会显示小区域?