Struct, enum e trait

Rust Methods and impl Blocks

Attach behavior to a struct: methods with &self, changes with &mut self and constructors like new.

  • Intermedio
  • 4 min di lettura
  • 1 esempio eseguibile
Cosa imparerai
  • impl blocks
  • &self and &mut self
  • Associated functions
Receiver → what the method can do
fn area(&self)read
fn scale(&mut self, f)change
fn new(w, h) -> Selfcreate

Functions that belong to a type

An impl block holds the functions that belong to a type. A method takes self as its first parameter and is called with a dot. A function without self, such as new, is called with the type name and ::.

&self borrows the rectangle for reading and &mut self borrows it for changing, which is why rect must be mut to call scale. Self is a short name for the type of the impl block. new and square are associated functions used as constructors.

Punti chiave

  1. &self reads the value.
  2. &mut self changes it.
  3. Rectangle::new has no self: it is a constructor.

Esempio Rust eseguibile

Rust
Esegui il codice →
main.rs
struct Rectangle {
    width: f64,
    height: f64,
}

impl Rectangle {
    fn new(width: f64, height: f64) -> Self {
        Self { width, height }
    }

    fn square(size: f64) -> Self {
        Self::new(size, size)
    }

    fn area(&self) -> f64 {
        self.width * self.height
    }

    fn scale(&mut self, factor: f64) {
        self.width *= factor;
        self.height *= factor;
    }
}

fn main() {
    let mut rect = Rectangle::new(3.0, 4.0);
    println!("area: {}", rect.area());

    rect.scale(2.0);
    println!("scaled: {} x {} = {}", rect.width, rect.height, rect.area());
    println!("square: {}", Rectangle::square(5.0).area());
}
Crea un pulsante Run per questo esempio Risultato dell'esecuzione
area: 12
scaled: 6 x 8 = 48
square: 25

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.

Prossima: Enums →

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