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

如何为bool类型实现toggle()扩展方法以切换其值?

实现bool类型toggle()功能的可行思路

因为bool是不可变值类型,无法直接修改实例本身的状态,不过可以通过以下几种方式模拟出你想要的toggle()调用形式:

1. 封装为可变包装类

通过自定义一个持有bool值的可变类,把状态变更逻辑封装在类的toggle方法里:

class MutableBool {
  bool value;
  MutableBool(this.value);
  
  // 实现toggle方法
  void toggle() {
    value = !value;
  }
}

// 使用示例
var isSelected = MutableBool(true);
isSelected.toggle();
print(isSelected.value); // 输出 false

这种方式的核心是用可变对象来承载不可变的bool值,通过修改对象内部的属性实现状态切换。

2. 扩展方法实现语法糖式切换

虽然本质还是重新赋值,但可以用扩展方法让写法更贴近你想要的toggle()调用形式:

extension BoolToggle on bool {
  bool toggle() => !this;
}

// 使用示例
bool isSelected = true;
isSelected = isSelected.toggle(); // 语法上模拟toggle调用

这个方案没有改变bool的不可变性,只是通过扩展方法简化了取反赋值的代码。

3. 利用可变容器承载bool值

借助List这类可变容器对象,把bool值放在容器里,通过修改容器内的元素实现切换,还可以给容器加扩展方法封装逻辑:

extension SingleBoolListToggle on List<bool> {
  void toggle() {
    if (isNotEmpty) this[0] = !this[0];
  }
}

// 使用示例
var isSelected = [true];
isSelected.toggle();
print(isSelected[0]); // 输出 false

这种方式和包装类思路类似,都是用可变载体来间接实现状态的修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:40:31