Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Именованные структуры

Как и C и C++, Rust поддерживает пользовательские структуры:

// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

struct Person {
    name: String,
    age: u8,
}

fn describe(person: &Person) {
    println!("{} is {} years old", person.name, person.age);
}

fn main() {
    let mut peter = Person {
        name: String::from("Peter"),
        age: 27,
    };
    describe(&peter);

    peter.age = 28;
    describe(&peter);

    let name = String::from("Avery");
    let age = 39;
    let avery = Person { name, age };
    describe(&avery);
}
This slide should take about 10 minutes.

Ключевые моменты:

  • Структуры работают так же, как в C или C++.
    • Как и в C++, в отличие от C, для определения типа не нужен typedef.
    • В отличие от C++, между структурами нет наследования.
  • Сейчас хороший момент сообщить, что существуют разные виды структур.
    • Структуры нулевого размера (например, struct Foo;) могут пригодиться, когда мы реализуем трейт для какого-то типа, но самому значению не нужно хранить никаких данных.
    • На следующем слайде мы представим кортежные структуры, которые используются, когда имена полей не важны.
  • Если у вас уже есть переменные с нужными именами, структуру можно создать с помощью сокращённой записи.
  • Поля структур не поддерживают значения по умолчанию. Значения по умолчанию задаются реализацией трейта Default, о котором мы поговорим позже.

Для дальнейшего изучения

  • Здесь также можно показать синтаксис обновления структуры:

    // Copyright 2023 Google LLC
    // SPDX-License-Identifier: Apache-2.0
    
    let jackie = Person { name: String::from("Jackie"), ..avery };
  • Он позволяет скопировать большую часть полей из старой структуры, не перечисляя их все явно. Он всегда должен быть последним элементом.

  • Чаще всего его используют вместе с трейтом Default. О синтаксисе обновления структуры подробнее поговорим на слайде о трейте Default, поэтому здесь не нужно его обсуждать, если студенты не спросят.