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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 15:12:10