मेरे पास निम्न कोड है:
pub trait GetIdentifier {
//...
}
impl<T: GetIdentifier> Hash for T {
fn hash(&self) -> //....
}
मुझे निम्नलिखित त्रुटि मिलती है:
error[E0119]: conflicting implementations of trait `std::hash::Hash` for type `&_`:
--> <anon>:18:1
|
18 | / impl<T: GetIdentifier> Hash for T {
19 | | }
| |_^
|
= note: conflicting implementation in crate `core`
error[E0210]: type parameter `T` must be used as the type parameter for some local type (e.g. `MyStruct<T>`); only traits defined in the current crate can be implemented for a type parameter
--> <anon>:18:1
|
18 | / impl<T: GetIdentifier> Hash for T {
19 | | }
| |_^
क्यों? मैंने लागू नहीं किया GetIdentifier
के लिये &_
, तो कंबल impl
shouldn "t पर लागू होता है &_
। मेरे टोकरे के उपभोक्ता लागू नहीं कर पाएंगे GetIdentifier
कोर प्रकार के लिए या तो, वहाँ कोई समस्या नहीं है। मुझे यहां क्या समझ नहीं आ रहा है? यही वजह है कि &_
यहां तक कि यहां भी शामिल है - मैंने नहीं किया ?Sized
मेरे लक्षण पर बंधे हुए हैं इसलिए "यहाँ तक कि विचार नहीं किया जाना चाहिए .... ठीक है?"
उत्तर:
उत्तर № 1 के लिए 1आपके टोकरे के उपभोक्ता लागू हो सकते हैं GetIdentifier
के लिये TheirType
और एक साथ लागू होते हैं Hash
के लिये TheirType
.
अब आप कह सकते हैं कि उनकी समस्या है, लेकिन एक विशेषता के साथ एक और टोकरा कल्पना करो Foo
वह भी करता है impl<T: Foo> Hash for T {}
, तथा TheirType
क्रियान्वयन Foo
तथा GetIdentifier
। अचानक वे "या तो विशेषता को लागू नहीं कर सकते हैं।
त्रुटि का कारण होता है &_
यह है कि stdlib प्रत्यारोपण किसी भी प्रकार का कहना है T
क्रियान्वयन Hash
का कारण बनता है &T
लागू करने के लिए Hash
.