Quero passar uma função que utiliza um iterador arbitrário de algum tipo (por exemplo, String
no exemplo abaixo) para outra função, mas não sei como especificar o tipo dessa função.
Aqui está um exemplo mínimo (não funcional) do que estou tentando alcançar. O compilador não pode inferir o tipo de I
.
fn process<I>(lines: I)
where
I: Iterator<Item = String>, // or IntoIterator
{
for line in lines {
println!("{}", line.to_uppercase());
}
}
fn run<F, I>(processor: F)
where
I: Iterator<Item = String>,
F: Fn(I),
{
let v = vec![
String::from("aaa"),
String::from("BBB"),
String::from("cCcC"),
];
processor(v.iter());
}
fn main() {
run(process);
}