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

Dart 语言中如何自定义新的运算符?

Dart 自定义 ?: 类条件运算符的实现方案

核心结论

  • Dart 仅支持重载预定义列表内的运算符,?: 是内置的三元条件运算符固定语法,不属于可重载的运算符范围,无法直接自定义完全一致的符号写法。
  • 可通过「运算符重载+扩展方法」或「普通扩展方法」实现完全等价的逻辑效果。

实现方案1:用现有可重载运算符模拟

可以选择一个和业务场景无冲突的预定义运算符,结合扩展方法模拟你需要的效果:

// 对bool类型扩展,重载%运算符实现条件为假时执行回调
extension BoolConditionalExtension on bool {
  T? operator %<T>(T Function() fallback) {
    if (!this) return fallback.call();
    return null;
  }
}

使用示例:

// 效果等价于你想要的 condition ?: func()
false % () => print('条件不成立,执行函数'); // 正常输出日志
true % () => print('条件成立,不执行'); // 无输出

你也可以根据自己的使用习惯替换为其他可重载运算符,比如|、^等。

实现方案2:语义化扩展方法(可读性更高)

如果不需要严格对标?:的符号写法,更推荐用语义化的普通扩展方法,代码可读性更高:

extension BoolConditionalExtension on bool {
  T otherwise<T>(T Function() fallback) {
    if (!this) return fallback.call();
    // 条件成立时可根据业务需求调整返回值
    return null as T;
  }
}

使用示例:

(10 < 5).otherwise(() => print('10不小于5')); // 正常输出日志

补充说明

Dart 官方规定的可重载运算符列表如下:<、+、|、>、/、^、<=、~/、&、>=、*、<<、==、–、>>、[]、%、~、[]=,不在这个列表内的符号都无法自定义为运算符。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:57:04