rust / beginner
Snippet
Assoziierte Funktionen und Konstruktor-Muster
Assoziierte Funktionen sind Methoden, die am Typ selbst angehängt sind, nicht an einer Instanz. Sie werden in impl-Blöcken definiert und oft als Konstruktoren verwendet (wie Rectangle::new). Methoden, die die Instanz ändern müssen, nehmen &mut self, während Methoden, die nur lesen, &self nehmen.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
struct Rectangle {width: u32,height: u32,}impl Rectangle {// Associated function (like a constructor)fn new(width: u32, height: u32) -> Self {Rectangle { width, height }}// Another associated function for squarefn square(size: u32) -> Self {Rectangle { width: size, height: size }}// Instance methodfn area(&self) -> u32 {self.width * self.height}// Method with mutable referencefn scale(&mut self, factor: u32) {self.width *= factor;self.height *= factor;}}fn main() {let rect = Rectangle::new(30, 50);let square = Rectangle::square(25);println!("Rectangle area: {}", rect.area());println!("Square area: {}", square.area());let mut scaled_rect = Rectangle::new(10, 10);scaled_rect.scale(3);println!("Scaled rectangle: {} x {}", scaled_rect.width, scaled_rect.height);}
Erklärung
1
fn new(width: u32, height: u32) -> Self
Assoziierte Funktion, die eine neue Rectangle-Instanz zurückgibt; Self bezieht sich auf Rectangle
2
fn square(size: u32) -> Self
Alternativer Konstruktor für ein Quadrat (gleiche Seiten)
3
fn area(&self) -> u32
Methode, die self unveränderlich leiht, um Instanzdaten zu lesen
4
fn scale(&mut self, factor: u32)
Methode, die self veränderlich leiht, um Instanzdaten zu ändern
5
Rectangle::new(30, 50)
Aufruf einer assoziierten Funktion mit :: Syntax auf dem Typnamen