Traits

Un trait est une interface abstraite que des types peuvent implémenter (en gros c'est une liste de méthodes).

Pouvoir être additionné

On peut additionner des i32. Le type i32 implémente le trait Add.

#![allow(unused)]
fn main() {
struct Point {
    x: i32;
    y: i32;
}

impl Add for Point {
    type Output = Self;

    fn add(self, other: Self) -> Self::Output {
        x: self.x + other.x,
        y: self.y + other.y,
    }
}

println!({}, Point { x: 1, y: 0 } + Point { x: 2, y: 3 });
}

En fait, on peut "dériver" que implémenter le trait Add se fait en utilisant le trait Add déjà implémenté sur chaque champ :

#![allow(unused)]
fn main() {
#[derive(Add)]
struct Point2D {
    x: i32,
    y: i32,
}

}

Définir un trait

p. 75