Próbuję utworzyć wszystkie możliwe pary elementów w FlatMap
:Czy możliwe jest użycie std :: iter :: FlatMap.clone()?
possible_children.clone().flat_map(|a| possible_children.clone().map(|b| (a,b)))
Aby to zrobić, próbuję sklonować FlatMap
i widzę w dokumentacji, że FlatMap
struct implementuje metodę clone
. Ale nie wydaje się możliwe stworzenie takiego, który spełniałby granice cech.
Jest to błąd otrzymuję:
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`
Patrząc na dokumentacji widzę:
impl<I, U, F> Clone for FlatMap<I, U, F>
where F: Clone, I: Clone, U: Clone + IntoIterator, U::IntoIter: Clone
i
impl<I, U, F> Iterator for FlatMap<I, U, F>
where F: FnMut(I::Item) -> U, I: Iterator, U: IntoIterator
Wygląda F
jest związany zarówno Clone
cecha i cecha FnMut
, ale nie jest to możliwe e za coś, co zaimplementuje oba: FnMut
i Clone
.
Wydaje się dziwne, że w dokumentacji, do której nie można zadzwonić, istnieje metoda, więc muszę czegoś pomijać.
Czy ktoś może mi wyjaśnić?
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);
}
Jaka jest wartość 'possible_children', której próbujesz użyć, która daje ten błąd? – Dogbert
Rzeczywista wartość possible_children jest nieco skomplikowana, ale daje ten sam błąd: 'let possible_children = (0..10) .flat_map (| x | (0..10) .map (| y | (x, y)) ); ' –