Rust
रूपांतरण लक्षण
खोज…
टिप्पणियों
-
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
से प्रत्येक को अधिकतम एक बार लागू कर सकता है।