You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:12:20