从字符串转换为 lambda

Converting from string to lambda

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

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

Javalambda 表达式的脚本语法是 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; }");

你可以获得一个Java脚本函数对象。然后你需要将其转换为 Java 函数对象(也称为 lambda 表达式)。

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

然后随心所欲

someFunctionThatTakesInALambdaExpression(f);