Introducción
En este laboratorio, aprendemos que una cláusula where en Rust se puede utilizar para expresar límites para tipos genéricos por separado de su declaración, lo que permite una sintaxis más clara, y también se puede aplicar a tipos arbitrarios en lugar de solo a parámetros de tipo. La cláusula where es especialmente útil cuando los límites son más expresivos que la sintaxis normal, como se muestra en el ejemplo que involucra el trato PrintInOption.
Nota: Si el laboratorio no especifica un nombre de archivo, puede utilizar cualquier nombre de archivo que desee. Por ejemplo, puede utilizar
main.rs, compilar y ejecutarlo conrustc main.rs &&./main.
Cláusulas where
Un límite también se puede expresar utilizando una cláusula where inmediatamente antes de la llave de apertura {, en lugar de en la primera mención del tipo. Además, las cláusulas where pueden aplicar límites a tipos arbitrarios, en lugar de solo a parámetros de tipo.
Algunos casos en los que una cláusula where es útil:
- Cuando especificar tipos genéricos y límites por separado es más claro:
impl <A: TraitB + TraitC, D: TraitE + TraitF> MyTrait<A, D> for YourType {}
// Expresando límites con una cláusula `where`
impl <A, D> MyTrait<A, D> for YourType where
A: TraitB + TraitC,
D: TraitE + TraitF {}
- Cuando utilizar una cláusula
wherees más expresiva que utilizar la sintaxis normal. Elimplen este ejemplo no se puede expresar directamente sin una cláusulawhere:
use std::fmt::Debug;
trait PrintInOption {
fn print_in_option(self);
}
// Debido a que de lo contrario tendríamos que expresarlo como `T: Debug` o
// utilizar otro método de enfoque indirecto, esto requiere una cláusula `where`:
impl<T> PrintInOption for T where
Option<T>: Debug {
// Queremos `Option<T>: Debug` como nuestro límite porque eso es lo que
// se está imprimiendo. Hacer lo contrario sería utilizar el límite incorrecto.
fn print_in_option(self) {
println!("{:?}", Some(self));
}
}
fn main() {
let vec = vec![1, 2, 3];
vec.print_in_option();
}
Resumen
¡Felicitaciones! Has completado el laboratorio de Cláusulas where. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.