java如何将字符串转换为lambda函数
我需要将我输入的字符串变成python风格的lambda函数示例:
输入:
"x ^ 2 - 2xy + y ^ 2" // I introduce the function
eval (x, y) // Tells what variables to evaluate
2, 4 // x will be worth 2, and will be worth 4
输出:4
也就是说,我像这样操作它。 我在另一个stackoverflow问题中看到了一个类,但它不适合我:
代码:
import java.util.function.Function;
import javax.script.*;
public class ScriptFunction {
public static void main(String[] args) throws Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
@SuppressWarnings("unchecked") Function <Object, Object> f
= (Function <Object, Object>)
engine.eval(String.format("new java.util.function.Function(%s)",
args[0]));
for (int i = 1; i < args.length; i++) {
System.out.println(f.apply(args[i]));
}
}
}
输入命令:
java ScriptFunction 'function(x) 3 * x + 1' 17 23 47
错误: enter image description here
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "<local1>" is null
at ScriptFunction.main(ScriptFunction.java:10)
有人上过这样的课吗?或者你能告诉我该怎么做吗?我是新手,谢谢你的理解和帮助
附言:我想让字符串成为
# 1 楼答案
由于java函数接口只接受一个参数和一个返回值,因此不能让它接受两个参数,但可以通过使用有效的javascript使示例正常工作
我没有为函数使用参数。我刚过了线。当我把它当作
我得到以下输出
# 2 楼答案
现在有点不清楚你们到底想解决什么问题,为什么。了解这一点将有助于定制解决方案;e、 g.在一个类上使用lambda函数比使用方法更好吗;你真的想执行JavaScript吗;等等
话虽如此,我还是要回答这个问题:返回一个Java函数类型,在一组参数上执行给定的JavaScript函数
这个类的关键是} ,它接受两个参数并返回结果计算。bi函数委托给
asBiFunction
,它返回一个^{eval
方法,该方法将两个参数绑定到“x”&;“y”Javascript变量,并使用deprecatedNashorn Javascript引擎使用该绑定执行代码本例中的输入脚本已重写为等效的有效JavaScript代码