2015-06-11 5 views

risposta

14

Il Copy trait is a subtrait of Clone, quindi è sempre necessario implementare Clone se si implementa Copy:

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

Questo ha senso, in quanto entrambi Copy e Clone sono modi di duplicare un oggetto esistente, ma con una semantica diversa. Copy può duplicare un oggetto semplicemente copiando i bit che compongono l'oggetto (come memcpy in C). Clone può essere più costoso e potrebbe comportare l'allocazione della memoria o la duplicazione delle risorse di sistema. Tutto ciò che può essere duplicato con Copy può anche essere duplicato con Clone.

+0

Mi ricordo di una discussione sulla deriva automaticamente tratti pre-requisito 'implementazioni derive'; sai se è ancora pianificato o se ci sono stati problemi con l'approccio che lo ha respinto? –

5

Questo accade perché il tratto Copy, dipende dal tratto Clone. Il compilatore non tenterà di dedurre e implementare il tratto per te. Quindi è necessario implementare esplicitamente anche il tratto Clone.

Come quella:

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