Appearance
高阶函数
- 接受一个或多个函数作为输入
- 输出一个函数
下面的例子展示了函数作为参数传递的情况。
rust
fn calc( method: fn(u8) -> u8, x: u8) -> u8 {
method(x)
}
fn add_one(x: u8) -> u8 {
x + 1
}
fn subtract_one(x: u8) -> u8 {
x - 1
}
fn main(){
let result_add = calc(add_one, 5);
let result_subtract = calc(subtract_one, 5);
println!("Result of adding one: {}", result_add); // Output: 6
println!("Result of subtracting one: {}", result_subtract); // Output: 4
}有时,函数作为参数,但是这个函数的参数很长,我们可以用type关键字替代整个函数的声明。
rust
type Operation = fn(u8) -> u8;
fn calc( method: Operation, x: u8) -> u8 {
method(x)
}下面的例子展示函数作为返回值的情况。
rust
fn create_multiplier(factor: u8) -> impl Fn(u8) -> u8 {
move |x| x * factor
}
fn main(){
let double = create_multiplier(2);
let result = double(5);
println!("{}", result); // Output: 10
}下面是一个复杂用例,展示了函数和模式匹配的结合使用。
rust
type Operation = fn(u8) -> u8;
fn calc( method: Operation, x: u8) -> u8 {
match method {
add_one => add_one(x),
subtract_one => subtract_one(x),
_ => x,
}
}
fn add_one(x: u8) -> u8 {
x + 1
}
fn subtract_one(x: u8) -> u8 {
x - 1
}
fn main(){
let result_add = calc(add_one, 5);
let result_subtract = calc(subtract_one, 5);
println!("Result of adding one: {}", result_add); // Output: 6
println!("Result of subtracting one: {}", result_subtract); // Output: 4
}