Rust是否支持bool类型的短路AndAssign/OrAssign运算符&&=、||=?
Rust中bool类型的短路赋值运算符问题
Rust 标准库中没有为 bool 类型提供原生的短路求值版 &&=(AndAssign)或 ||=(OrAssign)运算符,也就是你描述的那种等价于以下逻辑的语法糖:
// 预期的 x &&= y 逻辑 if x { x = y; } // 预期的 x ||= y 逻辑 if !x { x = y; }
不过你可以用更简洁的写法实现完全等价的短路逻辑:
对应
&&=的短路逻辑:x = x && y;
这个写法利用了&&本身的短路特性:当x为false时,不会计算y,直接保留x的原值;当x为true时,才会计算y并将结果赋值给x,和你写的if语句逻辑完全一致。对应
||=的短路逻辑:x = x || y;
同理,||的短路特性会在x为true时跳过y的计算,仅在x为false时才计算y并赋值。
需要特别注意区分短路写法和非短路的位运算赋值:
x &= y是位运算赋值,不会短路,无论x是什么值,都会先计算y再执行赋值,若y是带有副作用的表达式(比如函数调用),行为和短路写法完全不同。
如果追求极致的可读性,你最初的if语句写法也是完全可行的,尤其是在y的表达式比较复杂时,显式的if块可能更清晰。
内容的提问来源于stack exchange,提问作者BallpointBen
相关产品推荐
相关产品推荐

