在Dart中如何将加减运算符定义为可直接运算的变量?
在Dart中动态使用加减运算的实现方案
你不能直接将+或-运算符赋值给变量,因为Dart里的运算符并非一等对象,无法直接作为值引用。不过可以通过以下两种方式实现类似需求:
方法一:使用函数类型变量
定义一个接收两个double参数并返回double的函数类型变量,将加减逻辑封装成匿名函数赋值给它:
void main() { double x = 15.0; double y = 10.0; // 定义函数类型变量 double Function(double, double) plusOrMinus; if (x >= y) { plusOrMinus = (a, b) => a - b; } else { plusOrMinus = (a, b) => a + b; } // 使用方式 double width = plusOrMinus(10.0, 5.0); print(width); // 输出5.0(因为x>=y,执行减法) }
方法二:用扩展方法模拟运算符语法
如果想要更接近目标语法的写法,可以通过扩展方法实现(Dart中方法调用需带括号,无法完全省略,但可以简化为类似的形式):
// 全局变量存储运算逻辑 double Function(double, double)? _operation; // 扩展double类型,添加自定义方法 extension OperationExtension on double { double plusOrMinus(double other) { return _operation!(this, other); } } void main() { double x = 8.0; double y = 10.0; if (x >= y) { _operation = (a, b) => a - b; } else { _operation = (a, b) => a + b; } // 使用方式 double width = 10.0.plusOrMinus(5.0); print(width); // 输出15.0(因为x<y,执行加法) }
需要注意的是,Dart不支持动态切换内置运算符的行为,也无法直接实现10.0 plusOrMinus 5.0这种无括号的自定义语法,上述方案是最接近需求的实现方式。
内容的提问来源于stack exchange,提问作者greenzebra
相关产品推荐
相关产品推荐

