RUST_BASICRasgo avanzado de oxidación
Los tipos asociados son una forma de asociar marcadores de posición de tipo con un rasgo para que estos tipos de marcador de posición se puedan utilizar en las firmas del método del rasgo:
rasgo El implementador de especificará el tipo concreto correspondiente en lugar de este tipo para una implementación específica:
El tipo de elemento solo se puede seleccionar una vez, porque solo puede haber un iterador implícito para el contador. No es necesario especificar el iterador para el que necesitamos valores u32 cada vez que llamamos a Counter's next.
Al utilizar parámetros de tipo genérico, puede especificar un tipo concreto predeterminado para el genérico. Esto elimina la necesidad de implementar rasgos para tipos concretos si el tipo predeterminado es suficiente. La sintaxis para especificar un tipo predeterminado para un tipo genérico es usar ·
Sin parámetros es el siguiente:
Con parámetros de la siguiente manera:
El tipo de parámetro predeterminado se utiliza principalmente en los dos aspectos siguientes:
Un rasgo Métodos con el mismo nombre que otro rasgo:
Los métodos se pueden distinguir de la siguiente manera:
Sin embargo, la función asociada es parte del rasgo, pero no tiene ningún parámetro propio. Cuando dos métodos en el mismo alcance Si dos tipos implementan el mismo rasgo, Rust no puede calcular qué tipo esperamos:
Al llamar a Animal::baby_name(), se informará un error Animal::baby_name. es una función asociada en lugar de un método, por lo que no tiene ningún parámetro propio y no puede calcular qué implementación Animal::baby_name se requiere. En este caso, se debe utilizar la sintaxis completa:
Generalmente, la completa. la sintaxis calificada se define como:
p>Esta sintaxis más detallada solo es necesaria cuando hay múltiples implementaciones con el mismo nombre y Rust necesita ayuda para saber a qué implementación llamar.
Si queremos implementar Display en un Vec
Una forma de evitar esta limitación es usar el patrón newtype: puede crear una estructura Wrapper que contenga una instancia de Vec
La desventaja de este método es que debido a que Wrapper es un tipo nuevo, no tiene métodos definidos en su valor. Todos los métodos de Vec