Rust教學
Rust下載和安裝
Rust簡介
Rust Hello World
Rust的特點
Rust註釋
Rust開發環境安裝
Rust文檔
Rust第一個程序
Rust格式化打印
Rust調試
Rust顯示
測試用例:列表
Rust格式化
Rust原語
Rust常量和運算符
Rust元組
Rust數組和切片
Rust自定義類型
Rust結構
Rust可視性
Rust枚舉
Rust常量
Rust變量綁定
Rust變量綁定-可變性
Rust變量綁定-範圍和陰影
Rust變量綁定-聲明
Rust類型轉換
Rust類型轉換 - 字面量
Rust類型轉換-推導
Rust類型轉換 - 別名
Rust表達式
Rust if/else語句
Rust循環
Rust嵌套和標籤
Rust while循環
Rust for和範圍
Rust匹配/match
Rust匹配析構元組
Rust解構枚舉
Rust指針和引用
Rust解構結構
Rust Guards
Rust綁定
Rust if let
Rust while let
Rust函數
Rust方法
Rust閉包
Rust捕捉
Rust作爲輸入參數
Rust匿名類型
Rust輸入函數
Rust作爲輸出參數
Rust匿名類型
匿名類型
簡明扼要閉包從封閉範圍內捕捉變量。這是否有什麼後果? 它肯定不會。觀察一下在函數中調用一個封閉泛型要求,這是因爲它們定義如何要求:
// `F` must be generic.
fn apply<F>(f: F) where
F: FnOnce() {
f()
}
當封閉件被定義,編譯器隱式地創建一個新的匿名結構到內部存儲所捕獲的變量,通過之一 traits
: Fn
, FnMut
, 或 FnOnce
這種未知類型來實現功能。 這種類型被分配給被存儲直到調用變量。
由於這種新型的未知類型的,在功能的任何使用都需要泛型。但是,無限制類型參數(traits
: Fn
, FnMut
, 或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);
}