Rust中的匿名函數與閉包


一、匿名函數

語法:“|參數名| 語句”

參考下面的這個示例:

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的變量類型,閉包調用完成后,就無法再訪問原來的變量了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM