capypad
0 Tage Serie
rust / intermediate
Snippet

Struct-Update-Syntax mit Default

Rusts Struct-Update-Syntax mit `..` ermöglicht es, eine neue Struct-Instanz zu erstellen, während die meisten Felder aus einer bestehenden kopiert werden. In Kombination mit dem `Default` Derive-Makro ermöglicht es effiziente Konfigurationsmuster, bei denen Sie mit einer Basiskonfiguration beginnen und nur bestimmte Felder überschreiben.

snippet.rs
rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#[derive(Default, Debug)]
struct Config {
host: String,
port: u16,
timeout: u64,
}
 
fn main() {
let base = Config {
host: String::from("localhost"),
port: 8080,
timeout: 30,
};
 
let override_config = Config {
timeout: 60,
..base
};
println!("{:?}", override_config);
}
Erklärung
1
#[derive(Default, Debug)]
Derive-Makro, das das Default-Trait für Nullwert-Initialisierung und Debug für das Ausgeben implementiert
2
struct Config { host: String, port: u16, timeout: u64 }
Struct-Definition mit drei Feldern: host (String), port (u16) und timeout (u64)
3
let base = Config { host: String::from("localhost"), port: 8080, timeout: 30 }
Erstellt eine Basiskonfigurationsinstanz mit Standardwerten für alle Felder
4
let override_config = Config { timeout: 60, ..base }
Erstellt eine neue Config, indem nur timeout überschrieben und host und port von base kopiert werden
5
println!("{:?}", override_config)
Gibt override_config mit Debug-Formatierung aus: Config { host: "localhost", port: 8080, timeout: 60 }