मैं एक आदिम प्रकार u8
के लिए (serialize
से, मेरे द्वारा परिभाषित नहीं) एक विशेषता ToHex
के एक कार्यान्वयन प्रदान करना चाहते हैं:एक कार्यान्वयन प्रदान जब दोनों विशेषता और प्रकार यह टोकरा में नहीं हैं
impl ToHex for u8 {
fn to_hex(&self) -> String {
self.to_str_radix(16)
}
}
समस्या मैं इस संकलक त्रुटि मिलती है:
error: cannot provide an extension implementation where both trait and type are not defined in this crate
मैं यह त्रुटि और उसके तर्क के कारण को समझते हैं, इस वजह से दोनों विशेषता और आदिम प्रकार मेरी कोड के लिए बाहरी हैं। लेकिन मैं इस स्थिति को कैसे संभाल सकता हूं और के लिए ToHex
कार्यान्वयन प्रदान कर सकता हूं? और अधिक आम तौर पर आप इस तरह के मुद्दे को कैसे संभालेंगे, ऐसा लगता है कि यह समस्या सामान्य होनी चाहिए और इस तरह के प्रकारों को विस्तारित करना आसान और आसान होना चाहिए?
यह एक अच्छा हैक जो आप प्रस्तावित करते हैं। लेकिन मेरे मामले में मुझे चिंता है कि मैं इस तरह के सभी आदिम प्रकारों को लपेटने के लिए थोड़ा बोझिल होगा। – user3762625
@ user3762625, यह एक हैक नहीं है, वास्तव में यह एकमात्र संभव तरीका है। आप उन लक्षणों के गुणों को लागू नहीं कर सकते हैं जिनके पास आपके स्वामित्व वाले प्रकारों के स्वामित्व नहीं हैं, और कोई कामकाज नहीं है लेकिन नए प्रकार हैं। –
@ user3762625: ठीक है, प्रस्तुत किए गए मामले में, 'u8' के लिए' to_hex' फ्री-फ़ंक्शन होना आसान होगा (जिसे आप परिभाषित कर सकते हैं); जब आपको 'u8' पास करने की आवश्यकता होती है तो आपको केवल वास्तव में लपेटने की आवश्यकता होती है जहां' ToHex' की अपेक्षा की जाती है। –