अगर मैं दो बार एक टुकड़ा से अधिक पुनरावृति करने की कोशिश, it works fine:मैं एक टुकड़ा दो बार फिर से क्यों कर सकता हूं, लेकिन वेक्टर नहीं?
let a = &[1, 2, 3];
for i in a {
println!("{}", i);
}
for i in a { // works fine
println!("{}", i);
}
लेकिन अगर मैं it fails दो बार एक वेक्टर से अधिक पुनरावृति करने का प्रयास:
let a = vec![1, 2, 3];
for i in a {
println!("{}", i);
}
for i in a { // error: use of moved value: `a`
println!("{}", i);
}
मुझे लगता है कि IntoIterator
विशेषता द्वारा self
लेता है मूल्य, तो यह मुझे समझ में आता है कि दूसरा उदाहरण विफल रहता है। लेकिन पहला उदाहरण सफल क्यों होता है?
pedantically, पहले मामले में, 'A' के प्रकार नहीं वास्तव में एक टुकड़ा है, यह लंबाई 3. की एक सरणी के लिए एक संदर्भ है हालांकि, * deref coercions * एक सरणी के लिए एक संदर्भ में कार्य करने की अनुमति है ज्यादातर मामलों में एक टुकड़ा की तरह। स्पष्टीकरण के लिए – Shepmaster
@ शेमपस्टर धन्यवाद। क्या मैं यह सोचने में सही हूं कि पहले उदाहरण में 'ए' का प्रकार' &[i32; 3] है, जबकि एक टुकड़ा 'और [i32]' होगा? साथ ही, [यहां सूचीबद्ध सूची] (https://doc.rust-lang.org/std/ops/trait.Deref.html) में दिखाई देने वाले डेरफ जबरदस्ती है, या यह अधिक जादुई है? –
हां, वे प्रकार होंगे। मैंने थोड़ा सा झूठ बोला, यह एक dereference से थोड़ा अधिक जादुई है [https://github.com/rust-lang/rust/issues/29993), यह एक * जबरदस्ती * है। दस्तावेज़ों को जल्द ही ठीक से अद्यतन किया जाएगा। – Shepmaster