उधार मैं एक प्रोग्राम है जो कम या ज्यादा दिखता है इसउधार ली गई सामग्री से बाहर स्थानांतरित नहीं किया जा सकता जब एक सामान्य प्रकार
struct Test<T> {
vec: Vec<T>
}
impl<T> Test<T> {
fn get_first(&self) -> &T {
&self.vec[0]
}
fn do_something_with_x(&self, x: T) {
// Irrelevant
}
}
fn main() {
let t = Test { vec: vec![1i32, 2, 3] };
let x = t.get_first();
t.do_something_with_x(*x);
}
मूल रूप से की तरह, हम struct Test
है कि कुछ मूल्य उधार लेता है पर एक विधि कॉल कर सकते है। फिर हम पहले प्राप्त मूल्य को पार करते हुए, उसी संरचना पर एक और विधि कहते हैं।
यह उदाहरण पूरी तरह से ठीक काम करता है। अब, जब हम main
जेनेरिक की सामग्री बनाते हैं, तो यह अब और काम नहीं करता है।
error: cannot move out of borrowed content
src/main.rs:14 let raw_x = *x;
मैं पूरी तरह से यकीन है कि क्यों यह हो रहा है नहीं कर रहा हूँ:
fn generic_main<T>(t: Test<T>) {
let x = t.get_first();
t.do_something_with_x(*x);
}
तो मैं निम्नलिखित त्रुटि मिलती है। क्या कोई मुझे बता सकता है कि Test<i32>
get_first
पर कॉल करते समय उधार नहीं लिया जाता है जबकि Test<T>
है?
बहुत उपयोगी उत्तर, बहुत धन्यवाद! – NSAddict
"चलती बिट्स" का उपयोग थोड़ा उलझन में है, क्योंकि जंग चलने से जंग चलती है। शायद "प्रतिलिपि बिट्स" स्पष्ट होगा? –
@MatthieuM। ज़रूर। अपडेट किया गया।इसके लायक होने के लिए, मैंने पिछले शब्द सीधे भाषा संदर्भ से लिया: 'सादा, "सादा पुराने डेटा" प्रकारों के लिए, जिन्हें बस बिट्स चलकर कॉपी किया जा सकता है।' – BurntSushi5