Métodos Genéricos

Você pode declarar um tipo genérico em seu bloco 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());
}
  • Pergunta: Por que T é especificado duas vezes em impl<T> Point<T> {}? Isso não é redundante?
    • Isso ocorre porque é uma seção de implementação genérica para tipo genérico. Eles são genéricos de forma independente.
    • Significa que esses métodos são definidos para qualquer T.
    • É possível escrever Impl Point<u32> { .. }.
      • Point ainda é genérico e você pode usar Point<f64>, mas os métodos neste bloco só estarão disponíveis para Point<u32>.