一、匿名函數
語法:“|參數名| 語句”
參考下面的這個示例:
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的變量類型,閉包調用完成后,就無法再訪問原來的變量了。