rust / beginner
Snippet
Methoden und impl-Blöcke
Rust verwendet impl-Blöcke, um Methoden an Structs anzuhängen. Die new-Funktion ist ein übliches Muster für Konstruktoren — sie gibt Self (den Struct-Typ, der definiert wird) zurück. Methoden erhalten automatisch &self (unveränderliche Referenz) oder &mut self (veränderliche Referenz) als ersten Parameter, was Zugriff auf die Felder des Structs gibt. Die Punkt-Syntax ruft Methoden auf wie in objektorientierten Sprachen.
snippet.rs
1
struct Rectangle {\n width: u32,\n height: u32,\n}\n\nimpl Rectangle {\n fn new(width: u32, height: u32) -> Self {\n Rectangle { width, height }\n }\n \n fn area(&self) -> u32 {\n self.width * self.height\n }\n \n fn can_hold(&self, other: &Rectangle) -> bool {\n self.width > other.width && self.height > other.height\n }\n}\n\nfn main() {\n let rect = Rectangle::new(30, 50);\n println!("Area: {} square pixels", rect.area());\n}
Erklärung
1
impl Rectangle {
Startet einen impl-Block für das Rectangle-Struct
2
fn new(width: u32, height: u32) -> Self {
Assoziierte Funktion (Konstruktor), die eine neue Rectangle-Instanz zurückgibt
3
fn area(&self) -> u32 {
Methode, die eine unveränderliche Referenz auf die Struct-Instanz nimmt
4
self.width * self.height
Greift direkt über self auf Felder innerhalb einer Methode zu
5
Rectangle::new(30, 50)
Ruft die assoziierte Funktion über den Typnamen auf, nicht über eine Instanz
6
rect.area()
Ruft die Methode auf der Instanz über Punktnotation auf