鍍金池/ 教程/ Java/ Rust匿名類型
Rust解構枚舉
Rust類型轉換 - 別名
Rust枚舉
Rust閉包
Rust捕捉
Rust while let
Rust調(diào)試
Rust教程
Rust數(shù)組和切片
Rust自定義類型
Rust綁定
Rust for和范圍
Rust類型轉換
Rust作為輸入?yún)?shù)
Rust Hello World
Rust格式化
Rust類型轉換 - 字面量
Rust變量綁定-聲明
Rust常量
Rust循環(huán)
Rust Guards
Rust作為輸出參數(shù)
Rust結構
Rust指針和引用
Rust解構結構
Rust方法
Rust下載和安裝
Rust函數(shù)
Rust匹配/match
Rust類型轉換-推導
Rust while循環(huán)
Rust嵌套和標簽
Rust匹配析構元組
Rust顯示
Rust變量綁定-范圍和陰影
Rust表達式
Rust if/else語句
Rust變量綁定-可變性
Rust文檔
Rust匿名類型
Rust變量綁定
Rust注釋
Rust原語
Rust可視性
測試用例:列表
Rust格式化打印
Rust元組
Rust if let
Rust輸入函數(shù)
Rust常量和運算符

Rust匿名類型

匿名類型

簡明扼要閉包從封閉范圍內(nèi)捕捉變量。這是否有什么后果? 它肯定不會。觀察一下在函數(shù)中調(diào)用一個封閉泛型要求,這是因為它們定義如何要求:

// `F` must be generic.
fn apply<F>(f: F) where
    F: FnOnce() {
    f()
}

當封閉件被定義,編譯器隱式地創(chuàng)建一個新的匿名結構到內(nèi)部存儲所捕獲的變量,通過之一 traitsFnFnMut, 或 FnOnce 這種未知類型來實現(xiàn)功能。 這種類型被分配給被存儲直到調(diào)用變量。

由于這種新型的未知類型的,在功能的任何使用都需要泛型。但是,無限制類型參數(shù)(<T>)仍然是不明確的,不會被允許。 因此,邊界是由所述一個 traitsFnFnMut, 或FnOnce (實現(xiàn))足以指定它的類型。

// `F` must implement `Fn` for a closure which takes no
// inputs and returns nothing. Exactly what is required
// for `print`.
fn apply(f: F) where
    F: Fn() {

    f()
}

fn main() {
    let x = 7;

    // Capture `x` into an anonymous type and implement
    // `Fn` for it. Store it in `print`.
    let print = || println!("{}", x);

    apply(print);
}

也可以看看:

透徹分析FnFnMut, 和 FnOnce