闭包
- 闭包是一种匿名函数,用来保存进变量 或者作为参数传递给其他函数,但是和函数不同
的是允许捕获调用者作用域中的值
- 闭包可以带有泛型,Fn trait。
- 闭包可以为返回类型和参数推断类型,所以可以省略部分
1 2 3 4 5 6 7
| fn main() { let use_closure = || { println!("This is a closure"); }; use_closure(); println!("Hello world!"); }
|
1 2 3 4 5 6 7 8 9 10 11 12
| fn add_one_v1(x: u32) -> u32 { x+1 }
let add_one_v2 = |x: u32| -> u32 {x + 1};
let add_one_v3 = |x| {x+1}; let add_one_v4 = |x| x+1;
|
1 2
| let a = add_one_v4(5); let b = add_one_v3(5);
|
闭包可以为每个参数和返回值推导一个具体的类型,但是不能够推导两次
1 2 3 4 5 6 7 8 9 10
| let example_closure = |x| x; let s = example_closure("hello".to_string()); println!("s = {}",s);
let n = example_closure(5.to_string()); println!("n = {}",n);
|
1 2 3 4
| let i = 1; let exe = |x| x+i; let r = exe(5); println!("r = {}",r);
|