ich ToHex
eine Implementierung eines Merkmals zur Verfügung stellen möchte (nicht von mir definiert, von serialize
) für einen primitiven Typen u8
:eine Implementierung bereitstellt, wenn beiden Züge und Typ nicht in dieser Kiste sind
impl ToHex for u8 {
fn to_hex(&self) -> String {
self.to_str_radix(16)
}
}
Das Problem werde ich diesen Compiler-Fehler:
error: cannot provide an extension implementation where both trait and type are not defined in this crate
ich den Grund dieses Fehlers und seine Logik zu verstehen, ist dies sowohl, weil das Merkmal und die primitive Art zu meinem Code extern ist. Aber wie kann ich mit dieser Situation umgehen und eine ToHex
Implementierung für u8
bereitstellen? Und allgemeiner, wie gehst du mit dieser Art von Problem um, scheint mir, dass dieses Problem üblich sein muss und es möglich und einfach sein sollte, Typen wie dieses zu erweitern?
Es ist ein netter Hack, den Sie vorschlagen. Aber in meinem Fall mache ich mir Sorgen, dass es zu umständlich wäre, all die primitiven Typen, die ich benutze, so zu verpacken. – user3762625
@ user3762625, es ist kein Hack, es ist in der Tat die einzige mögliche Methode. Sie können Merkmalsimplementierungen von Eigenschaften, die Sie nicht besitzen, nicht zu Typen hinzufügen, die Sie nicht besitzen, und es gibt keine Problemumgehung, sondern neue Typen. –
@ user3762625: Nun, im vorliegenden Fall wäre es einfacher, eine "to_hex" -Freifunktion für "u8" direkt zu haben (die Sie definieren können); Sie müssen nur wirklich wickeln, wenn Sie ein "u8" übergeben müssen, wobei "ToHex" erwartet wird. –