Struct, enum e trait

Rust Generics

Write a function or struct once and use it with many types, with no cost at run time.

  • Intermedio
  • 3 min di lettura
  • 1 esempio eseguibile
Cosa imparerai
  • Type parameters
  • Trait bounds
  • Generic structs
largest<T>
largest(&[3, 9, 4])9
largest(&[2.5, 1.5])2.5
largest(&['x', 'b'])'x'

One definition, many types

Generics let you write code once and use it with different types. A type parameter such as T stands for a type that is chosen where the code is used.

T: PartialOrd + Copy is a trait bound: largest accepts any type that can be compared and copied, so it works with integers, floats and characters. Pair<T> is a generic struct, and its impl block is generic too. The compiler creates a separate version for each type, so generics cost nothing at run time.

Punti chiave

  1. T stands for a type chosen at the call.
  2. T: PartialOrd limits T to comparable types.
  3. The compiler makes a version per type.

Esempio Rust eseguibile

Rust
Esegui il codice →
main.rs
fn largest<T: PartialOrd + Copy>(items: &[T]) -> T {
    let mut largest = items[0];
    for &item in items {
        if item > largest {
            largest = item;
        }
    }
    largest
}

#[derive(Debug)]
struct Pair<T> {
    left: T,
    right: T,
}

impl<T: Copy> Pair<T> {
    fn swap(&self) -> Pair<T> {
        Pair { left: self.right, right: self.left }
    }
}

fn main() {
    println!("{}", largest(&[3, 9, 4]));
    println!("{}", largest(&[2.5, 1.5]));
    println!("{}", largest(&['x', 'b']));

    let pair = Pair { left: "a", right: "b" };
    println!("{:?}", pair.swap());
}
Crea un pulsante Run per questo esempio Risultato dell'esecuzione
9
2.5
x
Pair { left: "b", right: "a" }

Esercitati

Apri l'esempio nel compilatore online, cambia un valore o aggiungi una riga e prova a prevedere l'output prima di eseguirlo. Poi rompi il codice di proposito e leggi il messaggio del compilatore.

Hai finito questa lezione?

Segnala come imparata per tenere traccia dei tuoi progressi.

Esercitati con una sfida

Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.

Tutte le sfide