/ / स्थानीय रूप से परिभाषित सार्वजनिक विशेषता - जंग, लक्षण द्वारा विवश कोर लक्षणों के कंबल कार्यान्वयन

स्थानीय रूप से परिभाषित सार्वजनिक विशेषता - जंग, लक्षण द्वारा विवश मुख्य लक्षणों का कंबल कार्यान्वयन

मेरे पास निम्न कोड है:

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.