voglio fornire un'implementazione di un tratto ToHex
(non definito da me, da serialize
) per un tipo primitivo u8
:Fornire un'implementazione quando entrambi tratto e tipo non sono in questa cassa
impl ToHex for u8 {
fn to_hex(&self) -> String {
self.to_str_radix(16)
}
}
Il problema è ottengo questo errore di compilazione:
error: cannot provide an extension implementation where both trait and type are not defined in this crate
capisco il motivo di questo errore e la sua logica, questo è perché sia il tratto e il tipo primitivo sono esterni al mio codice. Ma come posso gestire questa situazione e fornire un'implementazione ToHex
per u8
? E più in generale come gestisci questo tipo di problema, mi sembra che questo problema debba essere comune e dovrebbe essere possibile e facile estendere tipi come questo?
È un bel trucco che tu proponi. Ma nel mio caso mi preoccupo che sarebbe un po 'troppo ingombrante per avvolgere tutti i tipi primitivi che uso in quel modo. – user3762625
@ user3762625, non è un hack, è in effetti l'unico metodo possibile. Non è possibile aggiungere implementazioni tratto di tratti che non possiedi a tipi che non possiedi, e non c'è soluzione alternativa ma newtypes. –
@ user3762625: Beh, nel caso presentato, sarebbe più semplice avere una funzione libera 'to_hex' per' u8' direttamente (che è possibile definire); hai solo bisogno di avvolgere quando devi passare un 'u8' dove è previsto' ToHex'. –