Rust Deref y desreferencia automática
Deref y DerefMut son rasgos en Rust, que se utilizan para convertir tipos de puntero para obtener el contenido señalado por el puntero. Por ejemplo, obtenga T de Box
Como puede ver por el nombre, Deref es una desreferencia para obtener un préstamo, que es una referencia compartida, y RerefMut es para obtener un préstamo variable.
La definición es la siguiente. Siempre que estos dos rasgos se implementen para un determinado tipo, se puede obtener el contenido del puntero.
Además, el operador de desreferencia* que utilizamos a menudo en realidad llama a la función deref. Por ejemplo
Podemos ver que s es esencialmente lo mismo que (s.deref()), y s.deref() es lo mismo que &*s
En cuanto a automático desreferencia, es decir, para facilitar a los programadores, cuando la variable no cumple con las condiciones, la variable se desreferencia automáticamente. Por ejemplo, la biblioteca Rust implementa muchas operaciones de cadena para & str. use cadena directamente. Al realizar operaciones de cadena, el compilador en realidad desreferencia automáticamente &string a &str.
Por ejemplo
El entrante debería ser str, pero de hecho llamamos a len en una cadena en el programa. Al llamar, los parámetros recibidos por len son &string, porque el compilador lo encontró. esa cadena no tiene un método len, por lo que intentó desreferenciar automáticamente, es decir, llamar a deref() para convertir &string en &str, para que el programa pueda ejecutarse normalmente.
Cuando el compilador descubre que no se puede compilar, intentará eliminar la referencia automáticamente en tres situaciones. Las tres situaciones son las siguientes:
1.&T se convierte a &U, donde. T: Deref
2.&mut T se convierte en &mut U, donde T: DerefMut
3.&mut T se convierte en &U, donde T : Deref