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

