РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
515 of 1245 menu

Синтаксис обновления ..

Синтаксис обновления .. используется при создании экземпляра структуры, когда часть полей нужно взять из уже существующей структуры того же типа, а остальные задать явно. Выражение начинается с перечисления изменяемых полей в фигурных скобках, затем ставится .. и указывается структура-источник, из которой копируются оставшиеся поля.

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

Синтаксис

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,
    которая описывает именованные поля и их типы
  • литерал структуры литерал структуры,
    который создаёт экземпляр с явным указанием полей
  • доступ к полям доступ к полям,
    который позволяет читать и изменять значения полей
  • деструктуризация деструктуризация,
    которая разбирает структуру на отдельные значения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить