rust / intermediate
Snippet
Struktur-Methoden und assoziierte Funktionen mit impl
Der 'impl'-Block definiert Methoden und assoziierte Funktionen für Strukturen. Assoziierte Funktionen wie 'from_celsius' und 'from_fahrenheit' nehmen kein 'self' und dienen als Konstruktoren, wobei 'Self' als Kurzform für den Strukturtyp verwendet wird. Methoden-Funktionen nehmen '&self' (oder '&mut self'), um auf Instanzdaten zu operieren. Diese Kapselung folgt Rusts objektorientierten Prinzipien und wahrt gleichzeitig Sicherheits- und Ownership-Semantik.
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
struct Temperature {celsius: f64,}impl Temperature {fn from_celsius(celsius: f64) -> Self {Self { celsius }}fn from_fahrenheit(fahrenheit: f64) -> Self {Self {celsius: (fahrenheit - 32.0) * 5.0 / 9.0,}}fn to_fahrenheit(&self) -> f64 {self.celsius * 9.0 / 5.0 + 32.0}fn to_kelvin(&self) -> f64 {self.celsius + 273.15}fn format(&self) -> String {format!("{:.2}°C = {:.2}°F = {:.2}K",self.celsius,self.to_fahrenheit(),self.to_kelvin())}}fn main() {let t1 = Temperature::from_celsius(25.0);let t2 = Temperature::from_fahrenheit(98.6);println!("{}", t1.format());println!("{}", t2.format());}
Erklärung
1
struct Temperature { celsius: f64 }
Struktur mit einzelnem Feld zur Speicherung der Temperatur in Celsius
2
impl Temperature { ... }
Implementierungsblock für Temperature-Struktur
3
fn from_celsius(celsius: f64) -> Self { Self { celsius } }
Assoziierte Konstruktor-Funktion gibt neue Self-Instanz zurück
4
fn to_fahrenheit(&self) -> f64
Methode mit unveränderlicher Referenz, berechnet Fahrenheit-Umwandlung
5
self.to_fahrenheit()
Aufruf einer anderen Methode auf derselben Instanz
6
Self { celsius }
Self-Kurzschreibweise, äquivalent zu Temperature { celsius }