fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { // definition
f(arg) + f(arg)
}
do_twice(|x| x + 1, 5) // call
Эта функция принимает как замыкания, так и указатели на функции. Он принимает указатель на функцию в качестве типа параметра.
Когда я должен предпочесть это использованию трейт-объекта, например &dyn Fn(i32) -> i32
или Box<dyn Fn(i32)-> i32>
вместо fn
fn do_twice(f: &dyn Fn(i32) -> i32, arg: i32) -> i32 { // definition
f(arg) + f(arg)
}
do_twice(&|x| x + 1, 5) // call
or
fn do_twice(f: Box<dyn Fn(i32) -> i32>, arg: i32) -> i32 { // definition
f(arg) + f(arg)
}