मैं एक प्रोग्राम लिखने की कोशिश कर रहा हूं जिसमें एरेज़ पर फ़िल्टरिंग और फोल्डिंग शामिल है। मैं संदर्भ के रूप में The Rust Programming Language, first edition का उपयोग कर रहा हूं, लेकिन मुझे समझ में नहीं आता कि जब मैं एरे पर इटरेटर बनाते हैं तो क्या होता है। यहाँ एक उदाहरण है:एक सरणी पर फिर से कैसे करें?
fn compiles() {
let range = (1..6);
let range_iter = range.into_iter();
range_iter.filter(|&x| x == 2);
}
fn does_not_compile() {
let array = [1, 4, 3, 2, 2];
let array_iter = array.into_iter();
//13:34 error: the trait `core::cmp::PartialEq<_>` is not implemented for the type `&_` [E0277]
array_iter.filter(|&x| x == 2);
}
fn janky_workaround() {
let array = [1, 4, 3, 2, 2];
let array_iter = array.into_iter();
// Note the dereference in the lambda body
array_iter.filter(|&x| *x == 2);
}
पहले समारोह में, मैं पालन कि सीमा पर इटरेटर स्वामित्व नहीं ले करता है, तो मैं filter
के लैम्ब्डा में एक &x
ले लेना चाहिए, लेकिन मुझे समझ में नहीं आता कि सरणी के साथ दूसरा उदाहरण अलग-अलग व्यवहार क्यों करता है।
धन्यवाद! मैंने यह जवाब चुना क्योंकि यह मुझे चला गया कि मैंने संकलक का इस्तेमाल अपने आप को समझने के लिए कैसे किया होगा। मैंने और जानने के लिए लिंक की भी सराहना की। – WillEngler