在stackoverflow here上有一个与此相同标题的问题,但我想问一下是否有可能在Java中做类似的事情.
我想做一些类似于desmos的东西,就像那个人在Javascript中做的那样,但是我想用Java来使用lwjgl 2.我是Java的新手,我想知道是否可以转换一块字符串转换为方法.可能吗?
我已经找到了可能的选项,我发现你可以制作自己的Java eval()方法.但是我不想为窗口宽度的每个像素替换字符串中的x.
提前致谢.
解决方法:
你需要的是一个可以计算表达式的引擎/库,在执行时定义为字符串.如果将评估代码包装到函数调用中(例如lambda函数),您将获得所需的内容.
选项1:您可以使用exp4j. exp4j是一个小型脚本库,能够在执行时评估表达式和函数.这是一个例子:
Expression e = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
.variables("x", "y")
.build()
.setVariable("x", 2.3)
.setVariable("y", 3.14);
double result = e.evaluate();
选项2:您可以使用Java’s script engine.您可以使用它来评估定义的表达式,例如,在JavaScript中:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("sin(1.25)");
选项3:编译为本机Java.使用此方法,您可以使用模板生成包含表达式的类的.java文件.比你调用Java编译器.这种方法的缺点是在实现中有一些复杂性和一些初始延迟(直到编译类),但性能是最好的.以下是一些探索链接:
注意事项无论您选择何种方法,请记住您需要考虑安全性.允许用户输入可以在没有安全限制的情况下进行评估的代码可能非常危险.
标签:java,eval
来源: https://codeday.me/bug/20190724/1523783.html