我个人不喜欢!
运营商缺乏可读性,所以我更喜欢使用.not()
。
虽然(显然)可以写出这样的东西:
fn main() {
let some_condition = false;
if !some_condition {
println!("condition is false");
}
}
这不适用于some_condition.not()
,除非我导入std::ops::Not
。为什么会这样?我认为可以在Rust中使用运算符,因为它们的特性在范围内。 !
是调用not
方法的快捷方式,不是吗?
答案 0 :(得分:8)
你的假设是错误的。编译器将运算符转换为对特征函数的调用(基元除外,它将它们直接转换为低级操作 1 ),但特征不一定在范围内。
或者,如果您愿意,您可以认为编译器将运算符转换为完全限定的调用,即!some_condition
变为::std::ops::Not::not(some_condition)
,这显然不关心是否存在使用指令是否在范围内。
1。 Here是为基元类型实现Add
的地方。请注意,add
的定义是self + other
!很明显,这个impl实际上并没有被编译器实际使用过。