如何在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
相关产品推荐
相关产品推荐

