今天在看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做为标识符。