Структура объекта не содержит данных, поэтому «глубокая копия» будет просто еще одним ее экземпляром: let thing_clone = Thing;
Для других типов вам просто нужно вручную клонировать поля и создать новыйобъект из клонированных полей.Предполагая, что есть метод new
для Thingy
и Location
:
let thingy_clone = Thingy::new(thingy.0, thingy.1);
let location_clone = Location::new(location.name.clone(), location.code);
Обратите внимание, что я только явно написал .clone()
для поля String.Это связано с тем, что u8 и i32 реализуют Copy
и, следовательно, будут автоматически копироваться при необходимости.Никакого явного копирования / клонирования не требуется.
Тем не менее, использование черты Clone
определенно более идиоматично.Если Thing
, Thingy
и Location
являются частью внешней библиотеки, вы можете отправить отчет об ошибке, попросив внедрить Clone
для этих структур.