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
也就是说,我是这样操作的2 ^ 2 - 2 * 2 * 4 + 4 ^ 2
。我在另一个 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
.
错误: 在此处输入图像描述
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "<local1>" is null
at ScriptFunction.main(ScriptFunction.java:10)
有没有人有这样的课程?或者你能告诉我应该怎么做吗?我是新手,感谢您的理解和帮助
后记:我想让一个字符串成为
解决方案
由于 java Function 接口只接受一个参数和一个返回值,因此您不能让它接受两个参数,但您可以使用有效的 javascript 让您的示例工作。
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");
Function < Object, Object > f = (Function < Object, Object > ) engine.eval(
"new java.util.function.Function(function(x){return 3*x + 1;})");
for (int i = 0; i < args.length; i++) {
System.out.println(f.apply(args[i]));
}
}
}
我没有为函数使用参数。我刚刚传递了字符串。当我运行它时
java ScriptFunction.java 1 2 3 4
我得到以下输出。
4.0
7.0
10.0
13.0
推荐阅读
- r - 我想根据样本 ID 中具有特定字母的观察结果在我的数据集中创建一个新变量
- php - 配置和添加客户端以使用 wordpress 作为 OpenId 提供程序
- c# - 在类库中定义 ref 类类型时出错
- reactjs - 如何解决 s3 key not found 错误
- ms-access - SubTotal Query based on condition of other column
- raku - Raku 中的 int32 失败
- c++ - 在对象中存储和检索不同的数据类型
- bash - BASH 脚本回显文本和命令
- c++ - 将 r 值引用唯一指针传递给 lambda 的正确方法
- ios - 为什么 Xcode 自动修复会创建两个同名的方法 `func tableView`?