首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从jdk8中的脚本管理器返回值

从jdk8中的脚本管理器返回值
EN

Stack Overflow用户
提问于 2020-03-10 14:34:27
回答 3查看 302关注 0票数 4

我一直在尝试下面的代码

代码语言:javascript
运行
复制
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);
    }
}

我收到一个错误,说

代码语言:javascript
运行
复制
Caused by: jdk.nashorn.internal.runtime.ParserException: <eval>:1:8 Invalid return statement
if(a<b){return b;}else{return a;}

我无法解决此问题。问题是,在我的用例中,'code‘变量将有一些规则,这将返回一些东西。我知道如何在不返回的情况下做到这一点,但我无法从代码中返回一些值。我该怎么做呢?

EN

Stack Overflow用户

发布于 2020-03-10 14:49:58

您应该先声明一个函数,然后执行它,才能获得结果

代码语言:javascript
运行
复制
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

或者将结果赋给一个变量,然后读取它

代码语言:javascript
运行
复制
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类似于任何浏览器中的开发人员工具控制台。您需要声明一个函数或一个变量。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60612569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档