Rust 迭代对字符的引用

Rust 迭代对字符的引用,rust,Rust,我有一个函数接收对字符的引用: 使用std::str::Chars; fn main(){ 设s=“aoeueu.to_string(); my_func(&s.chars()) } fn my_func(字符:&chars){ 以chars表示的x{ dbg!(x); } } 这不会编译,因为第9行的chars是引用,而不是迭代器: error[E0277]: `&std::str::Chars<'_>` is not an iterator --> src/ma

我有一个函数接收对
字符的引用

使用std::str::Chars;
fn main(){
设s=“aoeueu.to_string();
my_func(&s.chars())
}
fn my_func(字符:&chars){
以chars表示的x{
dbg!(x);
}
}
这不会编译,因为第9行的
chars
是引用,而不是迭代器:

error[E0277]: `&std::str::Chars<'_>` is not an iterator
 --> src/main.rs:9:14
  |
9 |     for x in chars {
  |              ^^^^^ `&std::str::Chars<'_>` is not an iterator
  |
  = help: the trait `std::iter::Iterator` is not implemented for `&std::str::Chars<'_>`
  = note: required by `std::iter::IntoIterator::into_iter`
error[E0277]:`&std::str::Chars`不是迭代器
|

=help:trait`std::iter::Iterator`没有为`&std::str::Chars实现问题是您持有对
Chars
的不可变引用,您不能自由地对其进行变异,
Iterator
仅为可变引用自动实现。出于非常好的理由,我们需要
&mut self

您有许多解决方案:将其作为可变引用、克隆或按值获取:

使用std::str::Chars;
fn main(){
设s=“aoeueu.to_string();
my_func(&mut s.chars())
}
fn my_func(字符:&mut字符){
以chars表示的x{
dbg!(x);
}
}
使用std::str::Chars;
fn main(){
设s=“aoeueu.to_string();
my_func(&s.chars())
}
fn my_func(字符:&chars){
对于chars.clone()中的x{
dbg!(x);
}
}
使用std::str::Chars;
fn main(){
设s=“aoeueu.to_string();
my_func(s.chars())
}
fn my_func(chars:chars){
以chars表示的x{
dbg!(x);
}
}

“按值获取”可能是用户想要的。

要进行迭代,必须修改迭代器。你必须克隆它,太好了!但是为什么会出现错误消息
&std::str::Chars@Maximilian这对未来来说可能是一个进步,但这并不容易发现这种情况。谢谢@stargateur。我更多的是问这意味着什么;完全理解它可能很难被发现。i、 e.是不是
&mut std::str::CharsAh great@Stargatour,我现在能更清楚地看到你的回答,谢谢你链接到
Impl