fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 { // definition
f(arg) + f(arg)
}
do_twice(|x| x + 1, 5) // call
这个函数接受闭包和函数指针。它采用函数指针作为参数类型。
什么时候我应该更喜欢这个而不是使用 trait 对象,比如&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
或者
fn do_twice(f: Box<dyn Fn(i32) -> i32>, arg: i32) -> i32 { // definition
f(arg) + f(arg)
}