Je souhaite implémenter le trait IntoIterator
pour une structure contenant un String
. L'itérateur est basé sur l'itérateur chars()
, est censé compter les caractères '1'
et accumuler le résultat. Ceci est une version simplifiée de ce que je suis arrivé à ce jour:Mauvais nombre de paramètres de durée de vie lors de l'utilisation d'un itérateur `Chars 'modifié
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
});
}
}
Sortie prévue: 1, 2, 2, 3
Cela échoue avec:
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
Le caractère iterator doit avoir la même vie que le StringStruct::system_string
, mais je n'ai aucune idée de comment l'exprimer ou si cette approche est viable du tout.
Je suis nouveau avec Rust. Comment puis-je utiliser votre solution? 'pour un ?????? {println! ("{}", a); } '? – LeMoussel
Je veux tester votre solution mais je ne vois pas comment faire. 'fn main() { let str_struct = StringStructIter {Comment faire à partir de" 1101 "? } pour un str_struct { println! ("{}", A); } } ' – LeMoussel
@LeMoussel J'ai ajouté le code restant, j'espère que tout devrait être clair maintenant! –