从字符串转换为 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);
我正在尝试使用 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);