下面的代码无法编译:
错误信息如下:
use std::str::Chars;
struct Chunks {
remaining: Chars,
}
impl Chunks {
fn new(s: String) -> Self {
Chunks {
remaining: s.chars(),
}
}
}
错误信息如下:
error[E0106]: missing lifetime specifier
--> src/main.rs:4:16
|
4 | remaining: Chars,
| ^^^^^ expected lifetime parameter
Chars
不拥有它遍历的字符,也不能超过创建它的&str
或String
的生命周期。
是否有一个拥有所有权的版本Chars
,不需要生命周期参数,还是我必须自己保留Vec<char>
和索引?
Chunks
泛型化迭代器类型:struct Chunks<Iter> {...}
,impl<Iter: Iterator<Item = char>> Chunks<Iter> {..}
,fn new<IntoIter: IntoIterator<Item = char>>(iter: IntoIter) ->Self {...}
。这样它就不会关心字符来自哪里;它可以是拥有的、借用的或其他任何形式。 - chbaker0