Structs, enums et traits

Rust Traits

Describe shared behavior once and implement it for any type, like interfaces in other languages.

  • Intermédiaire
  • 4 min de lecture
  • 1 exemple exécutable
Ce que vous allez apprendre
  • Defining a trait
  • Default methods
  • impl Trait and dyn Trait
trait Describe
  • Describe
    • Dogkeeps the default
    • Robotreplaces describe

Shared behavior for different types

A trait is a set of methods that a type can implement, similar to an interface in other languages. Code written against the trait works with every type that implements it.

Describe requires name and gives describe a default body. Dog keeps the default, while Robot replaces it. introduce accepts any type that implements Describe, and Box<dyn Describe> lets one vector hold values of different types.

Points clés

  1. A trait lists methods a type must have.
  2. A default method can be kept or replaced.
  3. Box<dyn Trait> stores different types together.

Exemple Rust exécutable

Rust
Exécuter le code →
main.rs
trait Describe {
    fn name(&self) -> String;

    fn describe(&self) -> String {
        format!("This is {}.", self.name())
    }
}

struct Dog;
struct Robot {
    model: u32,
}

impl Describe for Dog {
    fn name(&self) -> String {
        String::from("a dog")
    }
}

impl Describe for Robot {
    fn name(&self) -> String {
        format!("robot model {}", self.model)
    }

    fn describe(&self) -> String {
        format!("Beep. I am {}.", self.name())
    }
}

fn introduce(item: &impl Describe) {
    println!("{}", item.describe());
}

fn main() {
    introduce(&Dog);
    introduce(&Robot { model: 7 });

    let items: Vec<Box<dyn Describe>> = vec![Box::new(Dog), Box::new(Robot { model: 8 })];
    println!("{} items", items.len());
}
Obtenir un bouton Run pour cet exemple Résultat de l'exécution
This is a dog.
Beep. I am robot model 7.
2 items

S'entraîner

Ouvrez l'exemple dans le compilateur en ligne, modifiez une valeur ou ajoutez une ligne, et devinez la sortie avant de l'exécuter. Cassez ensuite le code exprès et lisez le message du compilateur.

Leçon terminée ?

Marquez-la comme apprise pour suivre votre progression.

Suivante : Generics →

S'entraîner avec un défi

Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.

Tous les défis