javascript - 从字符串转换为 lambda

标签 javascript java lambda scriptengine

我正在尝试使用 ScriptEngine 将字符串转换为 lambda 函数以进行输入。这是我到目前为止所提出的,但我只遇到错误:

ScripEngine engine = new ScriptEngineManager().getEngineByName("javascript");
someFunctionThatTakesInALambdaEquation((Function<Double, Double>)engine.eval("x -> x + 3")); 

最佳答案

JavaScript 的 lambda 表达式语法为 x => x + 3,或者等效地,您可以将其编写为匿名函数 function(x) { return x + 3; } }。 请注意,它与 Java 的 lambda 表达式 x -> x + 3 语法略有不同。

所以我尝试了 engine.eval("x => x + 3");,但脚本引擎出现异常。我不明白为什么。
但随着

AbstractJSObject obj = (AbstractJSObject) engine.eval("function(x) { return x + 3; }");

你可以获得一个JavaScript函数对象。然后您需要将其转换为 Java 函数对象(又名 lambda 表达式)。

Function<Double, Double> f = x -> (Double) obj.call(null, x);

然后做你喜欢做的事情

someFunctionThatTakesInALambdaExpression(f);

关于javascript - 从字符串转换为 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44059890/

相关文章:

java - 在 View 子类中实现监听器是否存在问题?

c# - 运算符 '&&' 不能应用于类型 'lambda expression' 和 'lambda 表达式的操作数

javascript - 单击 anchor 后如何更改 anchor 的 href?

javascript - 如何在 Android 移动设备上运行通用 Windows 平台桌面应用程序?

java - 不兼容的数据类型 : boolean and int

java - 解码简单 xml

c++ - 关于C++中auto关键字类型推导的疑惑

java - 创建具有不同目标对象的方法引用列表?

javascript - typeahead.js - 不将查询发送到 'remote' 位置

javascript - 在 JavaScript 中,是否可以绕过 setter?