Métodos Genéricos

Puedes declarar un tipo genérico en tu bloque impl:

#[derive(Debug)]
struct Point<T>(T, T);

impl<T> Point<T> {
    fn x(&self) -> &T {
        &self.0  // + 10
    }

    // fn set_x(&mut self, x: T)
}

fn main() {
    let p = Point(5, 10);
    println!("p.x = {}", p.x());
}
  • P: ¿Por qué T se especifica dos veces en impl<T> Point<T> {}? ¿No es redundante?
    • Esto se debe a que es una sección de implementación genérica para un tipo genérico. Son genéricos de forma independiente.
    • Significa que estos métodos están definidos para cualquier T.
    • Es posible escribir impl Point<u32> { .. }.
      • Point sigue siendo genérico y puedes usar Point<f64>, pero los métodos de este bloque solo estarán disponibles para Point<u32>.