Синтаксис обновления ..
Синтаксис обновления .. используется при создании
экземпляра структуры, когда часть полей нужно взять
из уже существующей структуры того же типа, а остальные
задать явно. Выражение начинается с перечисления
изменяемых полей в фигурных скобках, затем ставится
.. и указывается структура-источник, из которой
копируются оставшиеся поля.
Оператор .. принимает в качестве правого операнда
существующий экземпляр структуры. Поля, которые не были
указаны явно слева от .., копируются или
перемещаются из этого экземпляра в зависимости от типа
поля. Синтаксис обновления доступен только для структур,
у которых все оставшиеся поля имеют совместимые типы.
Синтаксис
StructName
{
field1: value1,
field2: value2,
..source
}
Пример
Давайте создадим структуру Point с двумя полями
и получим на её основе новую точку, изменив только
координату x:
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let p1 = Point { x: 1, y: 2 };
let p2 = Point { x: 5, ..p1 };
println!("{} {}", p2.x, p2.y);
}
Результат выполнения кода:
5 2
Пример
Давайте создадим структуру User с тремя полями
и построим нового пользователя, заменив имя и возраст,
а поле email взяв из исходного экземпляра:
struct User
{
name: String,
age: u8,
email: String,
}
fn main()
{
let u1 = User
{
name: String::from("abcde"),
age: 20,
email: String::from("12345"),
};
let u2 = User
{
name: String::from("xyz"),
age: 30,
..u1
};
println!("{} {} {}", u2.name, u2.age, u2.email);
}
Результат выполнения кода:
xyz 30 12345
Пример
Давайте покажем, что синтаксис обновления работает и с частичным переопределением всех полей, когда источник указывается, но ни одно поле из него фактически не копируется:
struct Point
{
x: i32,
y: i32,
}
fn main()
{
let p1 = Point { x: 1, y: 2 };
let p2 = Point { x: 10, y: 20, ..p1 };
println!("{} {}", p2.x, p2.y);
}
Результат выполнения кода:
10 20
Смотрите также
-
структура
struct,
которая описывает именованные поля и их типы -
литерал структуры
литерал структуры,
который создаёт экземпляр с явным указанием полей -
доступ к полям
доступ к полям,
который позволяет читать и изменять значения полей -
деструктуризация
деструктуризация,
которая разбирает структуру на отдельные значения