Rust ops特征怎么可能不在范围内?
我个人不喜欢Rust ops特征怎么可能不在范围内?,rust,Rust,我个人不喜欢缺乏可读性运算符,因此我更喜欢使用.not() 虽然(显然)人们可以这样写: fn main() { let some_condition = false; if !some_condition { println!("condition is false"); } } 这不适用于某些条件。not(),除非我导入std::ops::not。为什么会这样?我认为可以在Rust中使用运算符,因为它们的特性在范围内是调用not方法的快捷方式,不是
缺乏可读性
运算符,因此我更喜欢使用.not()
虽然(显然)人们可以这样写:
fn main() {
let some_condition = false;
if !some_condition {
println!("condition is false");
}
}
这不适用于
某些条件。not()
,除非我导入std::ops::not
。为什么会这样?我认为可以在Rust中使用运算符,因为它们的特性在范围内<代码>是调用not
方法的快捷方式,不是吗?您的假设是错误的。编译器将运算符转换为对trait函数的调用(除了原语,在原语中它将它们直接转换为低级操作1),但是trait不需要在该范围内
或者,如果您愿意,您可以认为编译器将运算符转换为完全限定调用,即!某些条件
变为::std::ops::Not::Not(某些条件)
,这显然不关心任何use指令是否在范围内
1。是为基本类型实现的
Add
。请注意,add
的定义是self+other
!显然,编译器从未实际使用过这个impl 您是否有“将它们直接转换为低级操作”的参考资料?您可以说这是显而易见的,因为基本类型的trait实现使用操作符,否则它将循环…@Stefan是基本类型实现Add的地方。请注意,add
的定义是self+other
!显然,编译器从未实际使用过这个impl
。