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