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

Частичное перемещение

Частичное перемещение - это механизм в Rust, который позволяет переместить владение отдельными полями структуры, не перемещая всю структуру целиком. После частичного перемещения оставшиеся поля структуры всё ещё можно использовать, однако саму структуру как единое целое использовать уже нельзя. Это возможно благодаря тому, что компилятор отслеживает состояние каждого поля отдельно.

Синтаксис

let value = instance.field;

Пример

Давайте создадим структуру с двумя полями типа String и переместим одно из полей в отдельную переменную:

struct Data { first: String, second: String, } fn main() { let data = Data { first: String::from("abcde"), second: String::from("12345"), }; let moved = data.first; let remaining = data.second; println!("{}", moved); println!("{}", remaining); }

Результат выполнения кода:

"abcde" "12345"

Пример

Давайте попробуем использовать всю структуру после частичного перемещения одного из её полей:

struct Data { first: String, second: String, } fn main() { let data = Data { first: String::from("abcde"), second: String::from("12345"), }; let moved = data.first; println!("{}", data.second); println!("{}", moved); }

Результат выполнения кода:

"12345" "abcde"

Здесь мы обращаемся к полю data.second, которое не было перемещено, поэтому код успешно компилируется. А вот попытка использовать data.first после перемещения привела бы к ошибке компиляции.

Пример

Давайте рассмотрим пример, в котором после частичного перемещения делается попытка использовать всю структуру целиком:

struct Data { first: String, second: String, } fn main() { let data = Data { first: String::from("abcde"), second: String::from("12345"), }; let moved = data.first; println!("{}", data.second); println!("{}", moved); }

Результат выполнения кода:

"12345" "abcde"

Смотрите также

  • раздел ownership,
    который описывает систему владения в Rust
  • оператор move,
    который выполняет перемещение значения
  • типаж Copy,
    который позволяет копировать значения вместо перемещения
  • метод clone,
    который создаёт глубокую копию значения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить