Fork me on GitHub

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]
posted @ 2023-02-03 21:53  BabyMelvin  阅读(45)  评论(0编辑  收藏  举报