मैं एक कस्टम विशेषता को लागू करना चाहता हूं &"a str
और पूर्णांक संख्या तक i32
, लेकिन जंग मुझे इसकी अनुमति नहीं देती है:
use std::convert::Into;
pub trait UiId {
fn push(&self);
}
impl<"a> UiId for &"a str {
fn push(&self) {}
}
impl<T: Into<i32>> UiId for T {
fn push(&self) {}
}
fn main() {}
यह निम्नलिखित त्रुटि का संकलन करने में विफल रहता है:
error[E0119]: conflicting implementations of trait `UiId` for type `&str`:
--> src/main.rs:11:1
|
7 | impl<"a> UiId for &"a str {
| ------------------------- first implementation here
...
11 | impl<T: Into<i32>> UiId for T {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `&str`
|
= note: upstream crates may add new impl of trait `std::convert::From<&str>` for type `i32` in future versions
&"a str
लागू नहीं करता है Into<i32>
। क्या इसे लागू करना संभव है UiId
के लिये &"a str
और सब कुछ है कि में परिवर्तित किया जा सकता है i32
ठोस प्रकार निर्दिष्ट किए बिना? मैं उसे कैसे कर सकता हूँ?
उत्तर:
उत्तर № 1 के लिए 10यह तथ्य कि &"a str
लागू नहीं करता है Into<i32>
इस पर ध्यान नहीं दिया जाता है, क्योंकि इस बात की कोई गारंटी नहीं है कि इसे बाद में जोड़ा नहीं जा सकता।
इसलिए यदि इसे अनुमति दी गई तो संभावित टूटने से पुस्तकालय के लक्षणों में कार्यान्वयन को जोड़ना कठिन हो जाएगा।
दुर्भाग्य से मैं उसके लिए न तो दस्तावेज ढूंढ सका, न ही अंदर जंग प्रोग्रामिंग भाषा न में बुक संदर्भ पुस्तिका.
सबसे अच्छा मुझे मिल सकता है आरएफसी 1023, जो कहता है कि एक टोकरा [...] उस पर भरोसा नहीं कर सकता Type: !Trait
जब तक पकड़ Type
या Trait
स्थानीय है।