मेरे पास दो प्रकार हैं जिनका समानता के लिए परीक्षण किया जा सकता है। हालांकि, एक बार जब मैं उन्हें Option
एस में लपेटता हूं, तो विभिन्न PartialEq
कार्यान्वयन द्वारा प्रदान की गई निस्संदेह खिड़की से बाहर निकलती है। मुझे map
का उपयोग करना होगा या अन्यथा उन्हें परिवर्तित करना होगा।समानता के लिए दो विकल्पों का परीक्षण करने का सबसे बेवकूफ तरीका क्या है जब वे मूल्यों को समानता के लिए परीक्षण किया जा सकता है?
उदाहरण के लिए, के &str
और String
का उपयोग करते हैं:
fn main() {
let a = "hello";
let b = "hello".to_owned();
assert_eq!(a, b); // Just fine
let a = Some(a);
let b = Some(b);
// error: mismatched types
assert_eq!(a, b);
// error: mismatched types
assert_eq!(a, b.as_ref());
// works, but highly tied to strings or slices,
// requires me to remember which is which
assert_eq!(a, b.map(|x| &x[..]));
}
वहाँ
निश्चित रूप से यह करने के लिए एक सरल या सीधी-सपाट तरीका होना चाहिए?
साइड-प्रश्न - PartialEq
को थोड़ा अधिक व्यापक रूप से कार्यान्वित करने से क्या रोकता है? मैं समेकन का अनुमान लगा रहा हूं, मेरा पुराना दासता।
impl<T, U> PartialEq<Option<U>> for Option<T>
where
T: PartialEq<U>,
RFCs और जंग मुद्दों (1, 2) में इस बारे में कुछ बकवास नहीं है।
मैंने वास्तव में इसे जोड़ने के लिए जंग को पैच लगाने की कोशिश की थी। हालांकि, यह पता चला है कि इसे भाषा में जोड़ना आसान नहीं है क्योंकि यह संस्करण 1.1 पर मौजूद है। मुख्य मुद्दों में से एक यह है कि 'कोई नहीं' संदिग्ध हो जाएगा, और आपको * किस प्रकार का 'कोई नहीं' * निर्दिष्ट करना होगा: 'कोई नहीं ::'। जाहिर है, यह ergonomics के लिए बहुत भयानक है। –
Shepmaster
यह एक बहुत अच्छा जवाब नहीं है। तो आप समानता जांच कैसे करते हैं? 'मानचित्र' के साथ? –