我试图使用ScriptEngine从字符串转换为输入的lambda函数。这是我想出到目前为止,但我只遇到错误:从字符串转换为lambda
ScripEngine engine = new ScriptEngineManager().getEngineByName("javascript");
someFunctionThatTakesInALambdaEquation((Function<Double, Double>)engine.eval("x -> x + 3"));
我试图使用ScriptEngine从字符串转换为输入的lambda函数。这是我想出到目前为止,但我只遇到错误:从字符串转换为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; }
。 请注意,它与lambda表达式x -> x + 3
的Java语法略有不同。
所以我尝试engine.eval("x => x + 3");
,但从脚本引擎得到一个异常。我不明白为什么。
但随着
AbstractJSObject obj = (AbstractJSObject) engine.eval("function(x) { return x + 3; }");
你可以得到一个JavaScript函数对象。然后,您需要将其转换为Java函数对象(aka lambda表达式)。
Function<Double, Double> f = x -> (Double) obj.call(null, x);
,然后做你喜欢什么都
someFunctionThatTakesInALambdaExpression(f);
这工作得很好。 “x => x + 3”语法也不适用于我。不知道为什么... –
“x => x + 3”似乎正常工作。 y = eval(“x => x + 3”); Y(3); //打印出6 – junvar
您可能会在'javascript'标记添加到您的问题。 –