在Rust代码中使用保留字做为标识符
今天在看Rocket的例子时,看到一个struct里有这样一段代码:
use rocket::form::Form;
#[derive(FromForm)]
struct Task<'r> {
complete: bool,
r#type: &'r str,
}
其中的'r
我知道是lifetime,但是r#type
是什么意思?
我让ChatGPT帮我解释这段代码,它回答这是Rust语言中使用关键字做为标识符的方法。
我又查询了《Rust语言圣经》,在Rust里叫原生标识符 Raw identifiers。
在编程语言中,通常是不能使用关键字keyword做为标识符的,比如不能使用int
做为函数名。
这些关键字在编程语言中是有特殊意义的,编译器也是要做特殊处理的,不能随便用。但是有些情况使用关键字是最合理的,比如上面的Task这个结构体,任务类型使用type
做为字段名是最合理的,换成其它的都不合适。 这时就需要在type
前面加上r#
,告诉编译器我就是要使用type
做为标识符。