String
を含む構造体のIntoIterator
特性を実装したいと思います。イテレータはchars()
イテレータに基づいており、'1'
の文字を数えてその結果を累積することになっています。これは私がこれまでに得たものの簡易版である:変更された `Chars`イテレータを使用したときの寿命パラメータの数が間違っています
use std::iter::Map;
use std::str::Chars;
fn main() {
let str_struct = StringStruct { system_string: String::from("1101") };
for a in str_struct {
println!("{}", a);
}
}
struct StringStruct {
system_string: String
}
impl IntoIterator for StringStruct {
type Item = u32;
type IntoIter = Map<Chars, Fn(char) -> u32>;
fn into_iter(self) -> Self::IntoIter {
let count = 0;
return self.system_string.chars().map(|c| match c {
Some('1') => {
count += 1;
return Some(count);
},
Some(chr) => return Some(count),
None => return None
});
}
}
予想される出力:1, 2, 2, 3
これはで失敗します。
error[E0107]: wrong number of lifetime parameters: expected 1, found 0
--> src/main.rs:17:25
|
17 | type IntoIter = Map<Chars, Fn(char) -> u32>;
| ^^^^^ expected 1 lifetime parameter
文字のイテレータはStringStruct::system_string
と同じ寿命を持っている必要があり、しかし、私はこれをどう表現するのか、このアプローチが実用的かどうかは考えていません。
私はRustとnewbyです。ソリューションを使用するにはどうすればよいですか? 'のために??????? {println!( "{}"、a); } '? – LeMoussel
私はあなたのソリューションをテストしたいが、私はこれを行う方法を見ていない。 'fn main(){ let str_struct = StringStructIter {" 1101 "からの操作方法は? }; for a str_struct { println!( "{}"、a); } } ' – LeMoussel
@LeMoussel残りのコードを追加しました。 –