我个人不喜欢!操作员缺乏可读性,所以我更喜欢使用.not().
虽然(显然)可以写出这样的东西:
fn main() {
let some_condition = false;
if !some_condition {
println!("condition is false");
}
}
Run Code Online (Sandbox Code Playgroud)
some_condition.not()除非我导入,否则这不起作用std::ops::Not.为什么会这样?我认为可以在Rust中使用运算符,因为它们的特性在范围内.!是调用not方法的快捷方式,不是吗?
你的假设是错误的.编译器将运算符转换为对特征函数的调用(原语除外,它将它们直接转换为低级操作1),但特征不一定在范围内.
或者,如果愿意,您可以认为编译器将运算符转换为完全限定的调用,即!some_condition变为::std::ops::Not::not(some_condition),这显然不关心任何使用指令是否在范围内.
1. 这是Add为原始类型实现的地方.注意那些的定义add是self + other!很明显,这个impl实际上并没有被编译器实际使用.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |