name metatags keywords generador etiquetas ejemplos description rust

rust - metatags - meta tags generator



¿Cuál es la palabra clave de tipo Rust? (1)

He visto el type palabra clave utilizado en algunos ejemplos de Rust, pero nunca he visto una explicación de ello. Algunos ejemplos de cómo lo he visto usado:

impl Add<Foo> for Bar { type Output = BarFoo; // omitted }

Y esto, tomado de la referencia :

type T = HashMap<i32,String>; // Type arguments used in a type expression let x = id::<i32>(10); // Type arguments used in a call expression

¿Alguien podría explicar qué hace esta palabra clave? No puedo encontrarlo en Rust by Example o en el libro de Rust.


Un type Foo = Bar; simple type Foo = Bar; fuera de un impl define un alias de tipo , y está documentado en The Book . Hay un type Foo<T> = ... versión genérica type Foo<T> = ... pero si entiendes los genéricos en general, esta es una extensión obvia.

type en un impl define un tipo asociado . Están documentados en The Book , pero ya he escrito un breve resumen, así que también obtienes eso:

Cuando tiene un rasgo como Add , desea abstraer no solo sobre qué tipos de cosas se pueden agregar, sino también sobre el tipo de su suma. La adición de enteros da como resultado números enteros, y la suma de flotantes da como resultado flotantes. Pero no desea que el tipo de resultado sea un parámetro de Add como en Add<ThingToAdd, ResultType> , por las razones que veré aquí.

Por lo tanto, el rasgo viene con un tipo que está asociado con el impl . Dada cualquier implementación de Add , p. Ej., impl Add<Foo> for Bar , el tipo del resultado de la adición ya está determinado. Esto se declara en el rasgo así:

trait Add<Rhs> { type Result; // ... }

Y luego todas las implementaciones definen cuál es el tipo de su resultado:

impl Add<Foo> for Bar { type Result = BarPlusFoo; // ... }