Вложенная структура в 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"
и выведите его.