一、匿名函數
語法:“|參數名| 語句”
參考下面的這個示例:
fn add(a: i32, b: i32) -> i32 {
a + b
}
fn main() {
let x = add(1, 2);
println!("{}+{}={}", 1, 2, x);
//匿名函數
let add = |x, y| x + y;
println!("{}+{}={}", 1, 2, add(1, 2));
}
可以看到,匿名函數不用刻意指定參數類型,rust會自動推斷,匿名函數常用於精減代碼,比如:
let a = (1..10).filter(|x| (x % 2 == 0));
for x in a{
print!("{} ",x);
}
這樣就快速找出10以內的偶數。
二、閉包
rust中閉包本質就是一個匿名函數,它與函數最大的區別之一,在於閉包能捕獲上下文環境中的變量
let x = 12345;
let t = || println! {"x={}",x};
t();
x是在閉包語句之外定義的變量,但是閉包里仍可以訪問,這是普通函數做不到的。
閉包還可以添加move關鍵字,強制將變量的所有權移動到閉包內,這樣對於沒有實現Copy trait的變量類型,閉包調用完成后,就無法再訪問原來的變量了。

