"Тритон-клон не реализован" при получении символа "Копировать для перечисления"

Следующий код:

#[derive(Copy)]
enum MyEnum {
    Test
}

Дает мне эту ошибку: ошибка: признак core::clone::Clone не реализован для типа MyEnum [E0277]

Почему это так и как его исправить?

Ответ 1

Copy trait - это тэйттрет Clone, поэтому вам всегда нужно реализовать Clone, если вы реализуете Copy

#[derive(Copy, Clone)]
enum MyEnum {
    Test
}

Это имеет смысл, так как и Copy и Clone являются способами дублирования существующего объекта, но с другой семантикой. Copy может дублировать объект, просто скопировав биты, составляющие объект (например, memcpy в C). Clone может быть более дорогостоящим и может включать выделение памяти или дублирование системных ресурсов. Все, что можно дублировать с помощью Copy, также можно дублировать с помощью Clone.

Ответ 2

Это происходит потому, что черта Copy, зависит от черты Clone. Компилятор не будет пытаться вывести и реализовать черту для вас. Поэтому вы должны явно реализовать свойство Clone.

Вроде:

#[derive(Copy,Clone)]
enum MyEnum {
  Test
}