Доступ к полям структуры
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 22 из 66.
После того как вы создали экземпляр структуры, вам понадобится способ извлечь хранящиеся в нем значения. Rust использует точечную нотацию для доступа к отдельным полям структуры.
Синтаксис прост: вы пишете имя экземпляра структуры, затем точку, а затем имя поля, к которому хотите получить доступ:
let product = Product {
name: String::from("Laptop"),
price: 999,
};
println!("Product: {}", product.name);
println!("Price: ${}", product.price);Эта точечная нотация работает точно так же, как доступ к свойствам в других языках программирования. Вы можете использовать полученные значения в выражениях, присваивать их переменным или передавать в функции — они ведут себя точно так же, как и любое другое значение этого типа.
Задание
ЛегкоВы получите три входных значения: название модели автомобиля, год выпуска автомобиля (в виде целого числа) и его пробег (в виде целого числа). Определите структуру Car с тремя полями: model типа String, year типа i32 и mileage типа i32. Создайте экземпляр этой структуры, используя входные значения, затем обратитесь к каждому полю и выведите его значение.
Требования:
- Определите структуру
Carс полями:model: String,year: i32иmileage: i32 - Прочитайте первое входное значение как модель автомобиля
- Прочитайте второе входное значение и преобразуйте его в
i32для года выпуска - Прочитайте третье входное значение и преобразуйте его в
i32для пробега - Создайте экземпляр структуры
Carс этими значениями - Используйте точечную нотацию для доступа к каждому полю и выведите информацию об автомобиле в точном формате, указанном ниже
Ввод:
- Первая строка: Модель автомобиля (например,
Tesla Model 3) - Вторая строка: Год выпуска как целое число (например,
2022) - Третья строка: Пробег как целое число (например,
15000)
Вывод:
- Первая строка:
Car: [model] - Вторая строка:
Year: [year] - Третья строка:
Mileage: [mileage] km
Шпаргалка
Для доступа к полям экземпляра структуры используйте точечную нотацию:
let product = Product {
name: String::from("Laptop"),
price: 999,
};
println!("Product: {}", product.name);
println!("Price: ${}", product.price);Синтаксис следующий: instance_name.field_name. Полученные значения можно использовать в выражениях, присваивать переменным или передавать в функции.
Попробуйте сами
use std::io;
// TODO: Определите здесь структуру Car с полями: model, year и mileage
fn main() {
// Чтение модели автомобиля
let mut model = String::new();
io::stdin().read_line(&mut model).expect("Failed to read line");
let model = model.trim().to_string();
// Чтение года
let mut year_input = String::new();
io::stdin().read_line(&mut year_input).expect("Failed to read line");
let year: i32 = year_input.trim().parse().expect("Invalid year");
// Чтение пробега
let mut mileage_input = String::new();
io::stdin().read_line(&mut mileage_input).expect("Failed to read line");
let mileage: i32 = mileage_input.trim().parse().expect("Invalid mileage");
// TODO: Создайте экземпляр структуры Car, используя введенные значения
// TODO: Обратитесь к каждому полю и выведите его в требуемом формате
// Car: [model]
// Year: [year]
// Mileage: [mileage] km
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента