dot操作
点号操作会有一些神奇的类型转换发生。将auto-referencing,auto-dereferencing和强转直到类型匹配。
有个函数foo有一个参数(self, &self或者&mut self)。如果调用value.foo,在调用合适的函数实现之前,编译器需要决定什么类型的Self.为了更好说明,使用全路径格式:
- 首先,编译器检查是否能直接调用
T::foo(value)。通过值调用的方式 - 如果不行,那么编译器将auto-reference方式
<&T>::foo(value)和<&mut T>::foo(value). 通过autoref函数调用 - 如果都不行,则使用Deref方式,
T: Deref<Target = U>将用U替代T尝试。如果不能dereference T那么就尝试unsizing T。例如:[i32; 2]转换成[i32]

浙公网安备 33010602011771号