函数式编程
在Rust中,函数当做参数在方法中传递。这种特性是函数式编程的基础。
函数类型
fn max(x:i32,y:i32) -> i32 {if x>y {x} else {y}}
其类型为
fn(i32, i32) -> i32
把函数赋值给变量
fn max(x:i32,y:i32) -> i32 {if x>y {x} else {y}}
fn min(x:i32,y:i32) -> i32 {if x<y {x} else {y}}
这两个函数的类型都是:
fn(i32, i32) -> i32
可以把函数赋值给变量:
let fun = max; // 自动推导赋值
println!("max(3,5) = {:?}", fun(3,5));
let t_fun:fn(i32, i32) -> i32 = max; // 指定类型赋值
println!("max(3,5) = {:?}", t_fun(3,5));
另外绑定函数的变量没有所有权与所有权转移的概念。
fn max(x:i32,y:i32) -> i32 {if x>y {x} else {y}}
fn main() {
let fun = max; // 自动推导赋值
let fun_1 = fun; // 赋值,这里没有所有权的概念
println!("max(3,5) = {:?}", fun(3,5));
println!("min(3,5) = {:?}", fun(3,5));
println!("min(3,5) = {:?}", fun_1(3,5));
}
// 编译通过,运行正常!
函数作为函数的返回值
asdf
函数作为函数的参数值
asdf
闭包作为参数
asdf
函数返回闭包
asdf