我正在尝试使用 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/