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

如何在Dart中存储运算符?报错:Expected an identifier

在Dart中存储并使用运算符的实现方案

Dart不允许直接将运算符(如+)赋值给变量,也不支持5 z 5这种自定义中缀表达式语法,你可以通过以下几种方式实现类似需求:

1. 使用函数类型变量

把运算符逻辑封装成函数,再将函数赋值给变量:

// 直接定义加法函数并赋值
var z = (int a, int b) => a + b;
var x = z(5, 5); // 结果为10

// 如果需要统一管理多种运算符,可先定义函数类型
typedef BinaryOperation = int Function(int, int);

// 存储加法
BinaryOperation op = (a, b) => a + b;
var sum = op(5, 5); // 10

// 切换为减法
op = (a, b) => a - b;
var difference = op(5, 5); // 0

2. 使用枚举绑定运算符逻辑

通过枚举定义运算符类型,再用扩展方法实现对应的运算:

enum Operator { add, subtract, multiply, divide }

extension OperatorLogic on Operator {
  int apply(int a, int b) {
    switch (this) {
      case Operator.add:
        return a + b;
      case Operator.subtract:
        return a - b;
      case Operator.multiply:
        return a * b;
      case Operator.divide:
        return a ~/ b; // 整数除法,如需浮点除法可改用a / b
      default:
        throw UnsupportedError("不支持该运算符");
    }
  }
}

// 使用示例
var z = Operator.add;
var x = z.apply(5, 5); // 10

3. 用扩展方法模拟类中缀调用

如果想更贴近"左操作数 + 变量 + 右操作数"的写法,可以用扩展方法实现:

typedef BinaryOperation = int Function(int, int);

extension IntOperator on int {
  int operate(BinaryOperation op, int other) => op(this, other);
}

// 使用示例
BinaryOperation z = (a, b) => a + b;
var x = 5.operate(z, 5); // 10

需要注意的是,Dart语法本身无法实现5 z 5这种完全自定义的中缀写法,以上方案都是通过函数或类的方式模拟运算符的存储与调用。

内容的提问来源于stack exchange,提问作者Abdallah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:55:23