原始标识符
与许多编程语言一样,Rust 具有“关键字”的概念。 这些标识符对语言有意义,因此你不能在变量名,函数名和其他位置使用它们。 原始标识符允许你使用通常不允许的关键字。
举个例子,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
你可以使用原始标识符来实现:
#![feature(rust_2018_preview)]
#![feature(raw_identifiers)]
fn r#match(needle: &str, haystack: &str) -> bool {
haystack.contains(needle)
}
fn main() {
assert!(r#match("foo", "foobar"));
}
注意 r#
不仅在定义的时候有,在调用的时候也得有。
更多的细节
此功能还是有一些用处的,但主要动机是版本间的情况。
例如,try
不是2015版的关键字,而是2018版的。
因此,如果你有一个用 Rust 2015 编写并具有 try
函数的库,要在 Rust 2018 中调用它,你需要使用原始标识符。
新的关键字
2018 中新定义的关键字:
async
and await
这里, 保留 async
用来实现 async fn
或者 async ||
闭包 和 async { .. }
块。
同时, 保留 await
用来保持 await!(expr)
这种语法是一个开放的选项。有关详细信息,请参阅 RFC 2394。
try
do catch { .. }
块已经被重命名为 try { .. }
并已经得到支持, 关键字 try
在2018版中将被保留. 有关详细信息,请参阅 RFC 2388。