如何在Dart中使用eval_ex包评估含变量名的文本表达式?
解决方法
要实现用变量名a+b+c-d的形式通过eval_ex包计算,需要利用该包的变量绑定功能,因为Expression构造函数仅接受字符串形式的表达式,不能直接传入Dart变量的运算结果。以下是具体实现步骤:
方法一:绑定预计算的变量值
先单独计算每个变量的数值,再将变量名与对应数值绑定到表达式中:
import 'package:eval_ex/eval_ex.dart'; void main() { // 计算各变量的数值 double a = Expression("21").eval(); double b = Expression("5*(e^(-1))").eval(); double c = Expression("log(8)-9").eval(); double d = Expression("(2^3)/6").eval(); // 创建表达式并绑定变量,计算结果 String result = Expression("a+b+c-d") ..bind("a", a) ..bind("b", b) ..bind("c", c) ..bind("d", d) .eval() .toString(); print(result); }
方法二:拼接变量表达式字符串
如果希望保留变量的原始表达式逻辑,也可以将各变量的表达式字符串拼接成最终表达式后直接计算:
import 'package:eval_ex/eval_ex.dart'; void main() { // 定义各变量的表达式字符串 String exprA = "21"; String exprB = "5*(e^(-1))"; String exprC = "log(8)-9"; String exprD = "(2^3)/6"; // 拼接成最终表达式 String finalExpr = "$exprA+$exprB+$exprC-$exprD"; // 计算结果 String result = Expression(finalExpr).eval().toString(); print(result); }
注意事项
你期望的Expression(a+b+c-d).eval().toString()写法无法运行的原因:
a+b+c-d在Dart中会被直接解析为数值运算,而Expression构造函数需要接收字符串类型的表达式参数,类型不匹配会导致编译错误。- eval_ex包的表达式解析依赖字符串格式的数学表达式,必须通过字符串传入变量名或完整表达式。
内容的提问来源于stack exchange,提问作者DktPhl2018
相关产品推荐
相关产品推荐

