strfunc方法java_如何在Java中将String转换为Function?

在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值