tôi đang cố gắng để tạo ra tất cả các cặp có thể có của các mục trong một FlatMap
:Có phải std :: iter :: FlatMap.clone() có thể không?
possible_children.clone().flat_map(|a| possible_children.clone().map(|b| (a,b)))
Để làm được điều này, tôi đang cố gắng để sao chép một FlatMap
và tôi thấy trong tài liệu rằng FlatMap
struct thực hiện một phương pháp clone
. Nhưng dường như không thể tạo ra một FlatMap
thỏa mãn các giới hạn đặc điểm.
Đây là lỗi Tôi nhận:
error: no method named `clone` found for type `std::iter::FlatMap<std::ops::Range<u16>, _, [[email protected]/main.rs:30:47: 33:27]>` in the current scope
--> src/main.rs:37:66
|
37 | possible_children.clone().flat_map(|a| possible_children.clone().map(|b| (a,b)))
| ^^^^^
|
= note: the method `clone` exists but the following trait bounds were not satisfied: `[[email protected]/main.rs:30:47: 33:27] : std::clone::Clone`
Nhìn vào tài liệu tôi thấy:
impl<I, U, F> Clone for FlatMap<I, U, F>
where F: Clone, I: Clone, U: Clone + IntoIterator, U::IntoIter: Clone
và
impl<I, U, F> Iterator for FlatMap<I, U, F>
where F: FnMut(I::Item) -> U, I: Iterator, U: IntoIterator
Dường như F
bị ràng buộc bởi cả Clone
đặc điểm và đặc tính FnMut
, nhưng không phải là possibl e để có điều gì đó để triển khai cả hai FnMut
và Clone
.
Có vẻ lạ rằng một phương pháp sẽ tồn tại trong tài liệu không thể gọi được, vì vậy tôi phải thiếu điều gì đó.
Có thể ai đó vui lòng làm rõ cho tôi không?
MVCE:
fn main() {
let possible_children = (0..10).flat_map(|x| (0..10).map(|y| (x,y)));
let causes_error = possible_children.clone().flat_map(|a|
possible_children.clone().map(|b| (a,b))
).collect();
println!("{:?}",causes_error);
}
Giá trị của 'possible_children' mà bạn đang cố gắng sử dụng cho lỗi đó là gì? – Dogbert
Giá trị thực tế của possible_children hơi phức tạp, nhưng điều này cho cùng một lỗi: 'let possible_children = (0..10) .flat_map (| x | (0..10) .map (| y | (x, y)) ); ' –