rust / intermediate
Snippet
Tupel-Strukturen für das Newtype-Muster
Tupel-Strukturen (auch Newtype-Muster genannt) verpacken einen einzelnen Wert in einer Struktur mit benannten Feldern, auf die per Index (.0, .1, etc.) zugegriffen wird. Sie bieten Typsicherheit, indem sie unterschiedliche Typen erstellen, die das Verwechseln von Parametern desselben zugrundeliegenden Typs verhindern, wie z.B. UserId versus Username, die beide Strings enthalten.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct UserId(u64);struct Username(String);struct Email(String);fn main() {let id = UserId(42);let name = Username(String::from("alice"));println!("User {} has email {}", name.0, email.0);let doubled = UserId(id.0 * 2);println!("Doubled ID: {}", doubled.0);}
Erklärung
1
struct UserId(u64)
Newtype-Wrapper um u64, der einen Benutzer-Identifikator repräsentiert
2
struct Username(String)
Newtype-Wrapper um String für die Speicherung des Benutzernamens
3
struct Email(String)
Newtype-Wrapper um String für die Speicherung der E-Mail-Adresse
4
let id = UserId(42)
Erstellt eine UserId-Instanz mit dem Wert 42
5
println!("User {} has email {}", name.0, email.0)
Zugriff auf die inneren String-Werte mit der .0 Index-Notation
6
let doubled = UserId(id.0 * 2)
Führt Operationen auf dem inneren Wert aus und verpackt das Ergebnis in einer neuen UserId