खोज…


टिप्पणियों

  • AsRef और Borrow समान हैं लेकिन अलग-अलग उद्देश्यों की सेवा करते हैं। Borrow का उपयोग कई उधार लेने के तरीकों को समान रूप से करने के लिए, या उनके स्वामित्व वाले समकक्षों की तरह उधार मूल्यों का इलाज करने के लिए किया जाता है, जबकि AsRef का उपयोग संदर्भों को सामान्य बनाने के लिए किया जाता है।
  • From<A> for B Into<B> for A From<A> for B , लेकिन इसके विपरीत नहीं।
  • From<A> for A निहित है।

से

Rust's From trait प्रकारों के बीच परिवर्तित करने के लिए एक सामान्य-उद्देश्य विशेषता है। किसी भी दो प्रकार के लिए TypeA और TypeB ,

impl From<TypeA> for TypeB

इंगित करता है कि का एक उदाहरण TypeB का एक उदाहरण से constructible होने की गारंटी है TypeA । इस तरह From इसका कार्यान्वयन दिखता है:

struct TypeA {
    a: u32,
}

struct TypeB {
    b: u32,
}

impl From<TypeA> for TypeB {
    fn from(src: TypeA) -> Self {
        TypeB {
            b: src.a,
        }
    }
}

AsRef और AsMut

std::convert::AsRef and std::convert::AsMut का उपयोग सस्ते रूप से संदर्भों में परिवर्तित करने के लिए किया जाता है। प्रकार A और B ,

impl AsRef<B> for A

इंगित करता है कि ए &A को &B और &B परिवर्तित किया जा सकता है, और

impl AsMut<B> for A

इंगित करता है कि एक &mut A को &mut B परिवर्तित किया जा सकता है।

यह मानों को कॉपी या स्थानांतरित किए बिना प्रकार रूपांतरण करने के लिए उपयोगी है। मानक लाइब्रेरी में एक उदाहरण है std::fs::File.open() :

fn open<P: AsRef<Path>>(path: P) -> Result<File>

यह File.open() को न केवल Path को स्वीकार करने की अनुमति देता है, बल्कि OsStr , OsString , str , String और PathBuf को निहित रूपांतरण के साथ देता है क्योंकि ये सभी प्रकार AsRef<Path> लागू AsRef<Path>

उधार, बॉरोअमुट और टाउडेड

std::borrow::Borrow और std::borrow::BorrowMut लक्षण का उपयोग उधार के प्रकारों के स्वामित्व के प्रकारों के इलाज के लिए किया जाता है। प्रकार A और B ,

impl Borrow<B> for A

इंगित करता है कि उधार लिया गया A का उपयोग किया जा सकता है जहां B वांछित है। उदाहरण के लिए, std::collections::HashMap.get() अपने get() विधि के लिए Borrow का उपयोग करता है, जिससे A &B साथ अनुक्रमित होने के लिए A कुंजियों वाले HashMap अनुमति मिलती है।


दूसरी ओर, std::borrow::ToOwned उल्टे संबंध को लागू किया जाता है।

इस प्रकार, उपरोक्त प्रकार A और B लागू कर सकते हैं:

impl ToOwned for B

नोट: जबकि A को लागू कर सकते Borrow<T> अधिक अलग-अलग प्रकार के लिए T , B केवल लागू कर सकते हैं ToOwned एक बार।

डेरेफ़ और डेरेफ़मुट

std::ops::Deref और std::ops::DerefMut लक्षण std::ops::DerefMut ऑपरेटर को ओवरलोड करने के लिए उपयोग किए जाते हैं, *x । प्रकार A और B ,

impl Deref<Target=B> for A

इंगित करता है कि &A बंधन को हटाने से &A &B और

impl DerefMut for A

इंगित करता है कि &mut A बंधन को &mut A &mut B

Deref (resp। DerefMut ) भी है जो की अनुमति देता है बलात्कार deref नामक एक उपयोगी भाषा सुविधा प्रदान करता है, एक &A (resp। &mut A ) स्वचालित रूप से एक करने के लिए मजबूर करने के लिए &B (resp। &mut B )। इसका उपयोग आमतौर पर String से &str कनवर्ट करते समय किया जाता है, जैसा कि &String को आवश्यक रूप से &str लिए अनिवार्य रूप से किया जाता है।


नोट: DerefMut परिणामी प्रकार को निर्दिष्ट करने का समर्थन नहीं करता है, यह उसी प्रकार का उपयोग करता है जैसा कि Deref करता है।

नोट: एक संबद्ध प्रकार ( AsRef विपरीत) के उपयोग के कारण, एक दिया गया प्रकार केवल Deref और DerefMut से प्रत्येक को अधिकतम एक बार लागू कर सकता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow