This is the sequel of this question
struct Int{
i : i32
}
fn main() {
let adder = move |x : &Int| Int{ i: x.i + 1};
let v_adder=vec![adder];
let i_adder=v_adder.iter();
let nv_adder=i_adder.collect::<Vec<&dyn Fn(&Int)->Int>>();
}
I have a long error message with this sentence:
help: the trait
FromIterator<&[closure@src/main.rs:8:17: 8:49]>
is not implemented forVec<&dyn for<'r> Fn(&'r Int) -> Int>
struct Int{ i : i32 }
fn main() {
let adder = move |x : &Int| Int{ i: x.i + 1};
let v_adder=vec![adder];
let i_adder=v_adder.iter();
let v = Vec::from_iter(i_adder);
let p= v[0](&Int{i:1}).i;
println!("{}",p)
}
But this code works fine. I use from_iter. It means that the trait FromIter is implemented.
updated after the kmdreko comment
I´ve change the first main function in order to replace &dyn for<'r> Fn(&'r Int) -> Int by impl Fn(&Int) -> Int>
let adder = move |x : &Int| Int{ i: x.i + 1};
let v_adder=vec![adder];
let i_adder=v_adder.iter();
let nv_adder=i_adder.collect::<Vec<impl Fn(&Int) -> Int>>();
error[E0562]:
impl Trait
only allowed in function and inherent method return types, not in path