附錄 A:關鍵字
appendix-01-keywords.md
commit 27dd97a785794709aa87c51ab697cded41e8163a
下面的列表包含 Rust 中正在使用或者以後會用到的關鍵字。因此,這些關鍵字不能被用作標識符(除了 “原始標識符” 部分介紹的原始標識符),這包括函數、變數、參數、結構體欄位、模組、crate、常量、宏、靜態值、屬性、類型、trait 或生命週期 的名字。
目前正在使用的關鍵字
如下關鍵字目前有對應其描述的功能。
as
- 強制類型轉換,消除特定包含項的 trait 的歧義,或者對use
和extern crate
語句中的項重命名break
- 立刻退出循環const
- 定義常量或不變裸指針(constant raw pointer)continue
- 繼續進入下一次循環疊代crate
- 連結(link)一個外部 crate 或一個代表宏定義的 crate 的宏變數dyn
- 動態分發 trait 對象else
- 作為if
和if let
控制流結構的 fallbackenum
- 定義一個枚舉extern
- 連結一個外部 crate 、函數或變數false
- 布爾字面值false
fn
- 定義一個函數或 函數指針類型 (function pointer type)for
- 遍歷一個疊代器或實現一個 trait 或者指定一個更高級的生命週期if
- 基於條件表達式的結果分支impl
- 實現自有或 trait 功能in
-for
循環語法的一部分let
- 綁定一個變數loop
- 無條件循環match
- 模式匹配mod
- 定義一個模組move
- 使閉包獲取其所捕獲項的所有權mut
- 表示引用、裸指針或模式綁定的可變性pub
- 表示結構體欄位、impl
塊或模組的公有可見性ref
- 透過引用綁定return
- 從函數中返回Self
- 實現 trait 的類型的類型別名self
- 表示方法本身或當前模組static
- 表示全局變數或在整個程序執行期間保持其生命週期struct
- 定義一個結構體super
- 表示當前模組的父模組trait
- 定義一個 traittrue
- 布爾字面值true
type
- 定義一個類型別名或關聯類型unsafe
- 表示不安全的代碼、函數、trait 或實現use
- 引入外部空間的符號where
- 表示一個約束類型的從句while
- 基於一個表達式的結果判斷是否進行循環
保留做將來使用的關鍵字
如下關鍵字沒有任何功能,不過由 Rust 保留以備將來的應用。
abstract
async
await
become
box
do
final
macro
override
priv
try
typeof
unsized
virtual
yield
原始標識符
原始標識符(Raw identifiers)允許你使用通常不能使用的關鍵字,其帶有 r#
前綴。
例如,match
是關鍵字。如果嘗試編譯如下使用 match
作為名字的函數:
fn match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
會得到這個錯誤:
error: expected identifier, found keyword `match`
--> src/main.rs:4:4
|
4 | fn match(needle: &str, haystack: &str) -> bool {
| ^^^^^ expected identifier, found keyword
該錯誤表示你不能將關鍵字 match
用作函數標識符。你可以使用原始標識符將 match
作為函數名稱使用:
檔案名: src/main.rs
fn r#match(needle: &str, haystack: &str) -> bool { haystack.contains(needle) } fn main() { assert!(r#match("foo", "foobar")); }
此代碼編譯沒有任何錯誤。注意 r#
前綴需同時用於函數名定義和 main
函數中的調用。
原始標識符允許使用你選擇的任何單詞作為標識符,即使該單詞恰好是保留關鍵字。 此外,原始標識符允許你使用以不同於你的 crate 使用的 Rust 版本編寫的庫。比如,try
在 2015 edition 中不是關鍵字,而在 2018 edition 則是。所以如果如果用 2015 edition 編寫的庫中帶有 try
函數,在 2018 edition 中調用時就需要使用原始標識符語法,在這裡是 r#try
。有關版本的更多訊息,請參見附錄 E.