/ / जंग में विशेषता के कार्यान्वयन को लागू करना - जेनरिक, जंग, कार्यान्वयन, लक्षण

जंग में विशेषता के विरोधाभासी कार्यान्वयन - जेनेरिक, जंग, कार्यान्वयन, लक्षण

मैं एक कस्टम विशेषता को लागू करना चाहता हूं &"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 स्थानीय है।