Modulelessen (1/2)
Structuren definiëren en instantiëren
Structs (of structuren) in Rust zijn aangepaste gegevenstypen waarmee u meerdere gerelateerde waarden kunt groeperen. Ze lijken op objecten of klassen in andere talen, maar zonder overerving.
Een structuur definiëren
Om een structuur te definiëren, gebruiken we het trefwoord struct gevolgd door de naam in PascalCase. Binnenin definiëren we de namen en typen van de velden:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}Een exemplaar maken
Om een struct te gebruiken, moeten we een instantie maken door alle opgegeven velden in te vullen:
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Access fields using dot notation
println!("Is user {} active? {}", user1.username, user1.active);
}Structurele veranderlijkheid
In Rust moet de gehele instantie worden gemarkeerd als veranderlijk (mut) als u een van de velden ervan wilt wijzigen. Rust staat niet toe dat alleen bepaalde velden als veranderlijk worden gemarkeerd:
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valid because user1 is mutable!
}Tuple-structuren en eenheidachtige structuren
Rust ondersteunt ook twee andere struct-formaten naast de klassieke benoemde veld-structs:
- Tupelstructuren: ze hebben een bijbehorende naam, maar de velden hebben geen individuele namen, alleen typen. Ze zijn nuttig voor het definiëren en differentiëren van specifieke typen:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - Unitachtige structuren: ze definiëren geen velden. Ze gedragen zich als het eenheidstype
(). Ze zijn handig wanneer u gedrag (eigenschappen) op een type moet implementeren zonder er gegevens in op te slaan.
Probeer het zelf
Definieer de gebruikersstructuur boven de hoofdstructuur met de velden: gebruikersnaam (tekenreekstype) en actief (booltype).
Toon hint
Schrijf `struct User { gebruikersnaam: String, active: bool }`before`main`.
Oplossing beschikbaar na 3 pogingen
Wijzig user1 om het veranderlijk te maken (laat user1 mut) en verander het actieve veld in false voordat u afdrukt.
Toon hint
Voeg `mut`to`let user1` toe om het`let mut user1`te maken, en voeg vervolgens`user1.active = false;` in.
Oplossing beschikbaar na 3 pogingen
Definieer een tupelstructuur met de naam Color die drie i32-velden bevat. In het algemeen instantiëert u Kleur met de waarden 255, 0 en 100, waarbij u het toewijst aan de variabele my_color, en drukt u vervolgens het eerste element (rode waarde) af met println!.
Toon hint
Definieer de tuple-structuur met `struct Color(i32, i32, i32);`. In het algemeen instantiëer je het als `let my_color = Color(255, 0, 100);`en druk je de rode waarde af met `my_color.0`.
Oplossing beschikbaar na 3 pogingen