Rust 附錄 A:關(guān)鍵字

2023-03-22 15:16 更新
appendix-01-keywords.md
commit efbafdba3618487fbc9305318fcab9775132ac15

下面的列表包含 Rust 中正在使用或者以后會(huì)用到的關(guān)鍵字。因此,這些關(guān)鍵字不能被用作標(biāo)識符(除了 “原始標(biāo)識符” 部分介紹的原始標(biāo)識符),這包括函數(shù)、變量、參數(shù)、結(jié)構(gòu)體字段、模塊、crate、常量、宏、靜態(tài)值、屬性、類型、trait 或生命周期 的名字。

目前正在使用的關(guān)鍵字

如下關(guān)鍵字目前有對應(yīng)其描述的功能。

  • ?as? - 強(qiáng)制類型轉(zhuǎn)換,消除特定包含項(xiàng)的 trait 的歧義,或者對 ?use? 語句中的項(xiàng)重命名
  • ?async? - 返回一個(gè) ?Future? 而不是阻塞當(dāng)前線程
  • ?await? - 暫停執(zhí)行直到 ?Future? 的結(jié)果就緒
  • ?break? - 立刻退出循環(huán)
  • ?const? - 定義常量或不變裸指針(constant raw pointer)
  • ?continue? - 繼續(xù)進(jìn)入下一次循環(huán)迭代
  • ?crate? - 在模塊路徑中,代指 crate root
  • ?dyn? - 動(dòng)態(tài)分發(fā) trait 對象
  • ?else? - 作為 ?if? 和 ?if let? 控制流結(jié)構(gòu)的 fallback
  • ?enum? - 定義一個(gè)枚舉
  • ?extern? - 鏈接一個(gè)外部函數(shù)或變量
  • ?false? - 布爾字面值 ?false?
  • ?fn? - 定義一個(gè)函數(shù)或 函數(shù)指針類型 (function pointer type)
  • ?for? - 遍歷一個(gè)迭代器或?qū)崿F(xiàn)一個(gè) trait 或者指定一個(gè)更高級的生命周期
  • ?if? - 基于條件表達(dá)式的結(jié)果分支
  • ?impl? - 實(shí)現(xiàn)自有或 trait 功能
  • ?in? - ?for? 循環(huán)語法的一部分
  • ?let? - 綁定一個(gè)變量
  • ?loop? - 無條件循環(huán)
  • ?match? - 模式匹配
  • ?mod? - 定義一個(gè)模塊
  • ?move? - 使閉包獲取其所捕獲項(xiàng)的所有權(quán)
  • ?mut? - 表示引用、裸指針或模式綁定的可變性
  • ?pub? - 表示結(jié)構(gòu)體字段、?impl? 塊或模塊的公有可見性
  • ?ref? - 通過引用綁定
  • ?return? - 從函數(shù)中返回
  • ?Self? - 定義或?qū)崿F(xiàn) trait 的類型的類型別名
  • ?self? - 表示方法本身或當(dāng)前模塊
  • ?static? - 表示全局變量或在整個(gè)程序執(zhí)行期間保持其生命周期
  • ?struct? - 定義一個(gè)結(jié)構(gòu)體
  • ?super? - 表示當(dāng)前模塊的父模塊
  • ?trait? - 定義一個(gè) trait
  • ?true? - 布爾字面值 ?true?
  • ?type? - 定義一個(gè)類型別名或關(guān)聯(lián)類型
  • ?union? - 定義一個(gè) union 并且是 union 聲明中唯一用到的關(guān)鍵字
  • ?unsafe? - 表示不安全的代碼、函數(shù)、trait 或?qū)崿F(xiàn)
  • ?use? - 引入外部空間的符號
  • ?where? - 表示一個(gè)約束類型的從句
  • ?while? - 基于一個(gè)表達(dá)式的結(jié)果判斷是否進(jìn)行循環(huán)

保留做將來使用的關(guān)鍵字

如下關(guān)鍵字沒有任何功能,不過由 Rust 保留以備將來的應(yīng)用。

  • ?abstract?
  • ?become?
  • ?box?
  • ?do?
  • ?final?
  • ?macro?
  • ?override?
  • ?priv?
  • ?try?
  • ?typeof?
  • ?unsized?
  • ?virtual?
  • ?yield?

原始標(biāo)識符

原始標(biāo)識符(Raw identifiers)允許你使用通常不能使用的關(guān)鍵字,其帶有 r# 前綴。

例如,match 是關(guān)鍵字。如果嘗試編譯如下使用 match 作為名字的函數(shù):

fn match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

會(huì)得到這個(gè)錯(cuò)誤:

error: expected identifier, found keyword `match`
 --> src/main.rs:4:4
  |
4 | fn match(needle: &str, haystack: &str) -> bool {
  |    ^^^^^ expected identifier, found keyword

該錯(cuò)誤表示你不能將關(guān)鍵字 match 用作函數(shù)標(biāo)識符。你可以使用原始標(biāo)識符將 match 作為函數(shù)名稱使用:

文件名: src/main.rs

fn r#match(needle: &str, haystack: &str) -> bool {
    haystack.contains(needle)
}

fn main() {
    assert!(r#match("foo", "foobar"));
}

此代碼編譯沒有任何錯(cuò)誤。注意 r# 前綴需同時(shí)用于函數(shù)名定義和 main 函數(shù)中的調(diào)用。

原始標(biāo)識符允許使用你選擇的任何單詞作為標(biāo)識符,即使該單詞恰好是保留關(guān)鍵字。 這給予了我們更大的自由來選擇名字,這樣與其他語言交互式就不用考慮到關(guān)鍵字問題,在要交互的語言中這個(gè)名字不是關(guān)鍵字。此外,原始標(biāo)識符允許你使用以不同于你的 crate 使用的 Rust 版本編寫的庫。比如,try 在 2015 edition 中不是關(guān)鍵字,而在 2018 edition 則是。所以如果用 2015 edition 編寫的庫中帶有 try 函數(shù),在 2018 edition 中調(diào)用時(shí)就需要使用原始標(biāo)識符語法,在這里是 r#try。有關(guān)版本的更多信息,請參見附錄 E


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號