Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsPmSrNs 240 of 373 menu
◀ ▶

Вложенная структура в Rust

Поле структуры может иметь тип другой структуры. Сначала объявляют вложенный тип, затем внешний, где одно из полей использует это имя типа. Так связывают данные разного уровня: адрес внутри пользователя, координаты внутри точки на карте.

В литерале внешней записи для вложенного поля пишут отдельный литерал с именами внутренних полей. К внутреннему полю доходят двумя точками подряд: сначала внешнее имя, затем внутреннее.

Опишем город и пользователя с полем города:

struct City { name: &'static str, } struct User { name: &'static str, age: i32, city: City, }

Соберем значение и прочитаем имя города:

let user = User { name: "ann", age: 20, city: City { name: "oslo" }, }; println!("{}", user.city.name);

На экране "oslo". Вложенный литерал можно вынести в переменную и подставить в поле при создании внешней записи.

Изменяемое вложенное поле меняют так же, как простое, если внешняя переменная изменяемая:

struct City { name: &'static str, } struct User { name: &'static str, age: i32, city: City, }

Заменим имя вложенного города:

let mut user = User { name: "ann", age: 20, city: City { name: "oslo" }, }; user.city.name = "bergen"; println!("{}", user.city.name);

Дана структура:

struct City { name: &'static str, } struct User { name: &'static str, age: i32, city: City, } let user = User { name: "ann", age: 20, city: City { name: "oslo" }, };

Выведите на экран имя города из поля city.

Дана структура:

struct Point { x: i32, y: i32, } struct Segment { start: Point, end: Point, } let seg = Segment { start: Point { x: 0, y: 0 }, end: Point { x: 3, y: 4 }, };

Запишите в dx разность координат x у конца и начала, выведите dx.

Дана структура:

struct City { name: &'static str, } struct User { name: &'static str, city: City, } let mut user = User { name: "bob", city: City { name: "oslo" }, };

Замените имя города на "bergen" и выведите его.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить