Closed
Description
It seems currently impossible to iterate over a &str
split by whitespace multiple times, due to Clone
not being available in any solution.
Given the code
fn takes_iter<'i, I>(_: I) where I: Iterator<Item = &'i str> + Clone {}
fn main() {
takes_iter("foo bar".split_whitespace());
}
I get the following error
rustc 1.19.0-nightly (afa1240e5 2017-04-29)
error[E0277]: the trait bound `std::str::SplitWhitespace<'_>: std::clone::Clone` is not satisfied
--> <anon>:4:5
|
4 | takes_iter("foo bar".split_whitespace());
| ^^^^^^^^^^ the trait `std::clone::Clone` is not implemented for `std::str::SplitWhitespace<'_>`
|
= note: required by `takes_iter`
error: aborting due to previous error
Other workarounds ("foo bar".split(char::is_whitespace)
and "foo bar".split(|c: char| c.is_whitespace())
also run into Clone
issues.
Metadata
Metadata
Assignees
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
bluss commentedon May 1, 2017
Something like
"foo bar".split(&[' ', '\n'][..])
or"foo bar".split(char::is_whitespace as fn(_) -> bool)
should work too, since the pattern is clonable. Unless there's an issue with that function pointer, hope not..Auto merge of #41659 - bluss:clone-split-whitespace, r=aturon