Rust匿名類型

匿名類型

簡明扼要閉包從封閉範圍內捕捉變量。這是否有什麼後果? 它肯定不會。觀察一下在函數中調用一個封閉泛型要求,這是因爲它們定義如何要求:

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

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

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

// `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