当前位置: 首页 > news >正文

附录A. Rust 关键字速查表

附录A. Rust 关键字速查表

本附录提供 Rust 语言所有关键字的完整速查表,包括当前使用的关键字、保留关键字以及特殊标识符。


当前使用的关键字

声明与定义类

关键字用途示例
fn定义函数或方法fn add(a: i32, b: i32) -> i32 { a + b }
let声明变量绑定let x = 5;
mut声明可变变量或引用let mut count = 0;
const定义编译时常量const MAX_SIZE: usize = 100;
static定义静态变量(全局生命周期)static GLOBAL: i32 = 42;
struct定义结构体struct Point { x: i32, y: i32 }
enum定义枚举类型enum Color { Red, Green, Blue }
union定义联合体(unsafe)union Data { i: i32, f: f32 }
type定义类型别名type Result<T> = std::result::Result<T, Error>;
trait定义 Trait(接口)trait Draw { fn draw(&self); }
impl实现方法或 Traitimpl Point { fn new() -> Self { ... } }

控制流类

关键字用途示例
if条件分支if x > 0 { println!("positive"); }
else条件分支的否定情况if x > 0 { ... } else { ... }
match模式匹配match value { Some(x) => x, None => 0 }
loop无限循环loop { break; }
while条件循环while count < 10 { count += 1; }
for迭代循环for i in 0..10 { println!("{}", i); }
break跳出循环loop { if done { break; } }
continue跳过本次循环for i in 0..10 { if i % 2 == 0 { continue; } }
return从函数返回fn get_value() -> i32 { return 42; }

模块与可见性类

关键字用途示例
mod定义模块mod utils { pub fn helper() {} }
pub公开可见性pub struct Point { pub x: i32 }
use导入路径到作用域use std::collections::HashMap;
crate当前 crate 的根路径use crate::utils::helper;
super父模块路径use super::parent_function;
self当前模块路径或方法接收者use self::inner_mod;fn method(&self)
Self实现类型的别名impl Point { fn new() -> Self { ... } }
extern链接外部 crate 或声明外部函数extern crate serde;extern "C" { fn abs(x: i32) -> i32; }

所有权与生命周期类

关键字用途示例
ref在模式中创建引用let ref x = 5;等价于let x = &5;
move强制闭包获取所有权let closure = move || println!("{}", x);
as类型转换或重命名导入let x = 5 as f64;use std::io::Result as IoResult;
where泛型约束子句fn func<T>(x: T) where T: Display { ... }
dyn动态分发 Trait 对象let obj: Box<dyn Draw> = Box::new(circle);

异步编程类

关键字用途示例
async定义异步函数或块async fn fetch_data() -> String { ... }
await等待异步操作完成let data = fetch_data().await;

Unsafe 与 FFI 类

关键字用途示例
unsafe标记不安全代码块或函数unsafe { *raw_ptr = 42; }

宏与属性类

关键字用途示例
macro_rules!定义声明式宏macro_rules! say_hello { () => { println!("Hello!"); } }

其他关键字

关键字用途示例
infor循环的一部分for item in collection { ... }
box堆分配(已弃用,使用Box::newlet b = box 5;(不推荐)

保留关键字(2015 Edition)

这些关键字在 Rust 2015 Edition 中保留,但尚未使用,为未来功能预留:

关键字预留用途
abstract可能用于抽象类型或方法
become可能用于尾调用优化
do可能用于循环或块
final可能用于继承控制
macro可能用于宏定义(已部分使用)
override可能用于方法重写
priv可能用于私有可见性
typeof可能用于类型查询
unsized可能用于动态大小类型
virtual可能用于虚方法
yield可能用于生成器(已在 nightly 中使用)

保留关键字(2018+ Edition)

Rust 2018 Edition 及之后新增的保留关键字:

关键字预留用途
try可能用于错误处理(已有try块在 nightly)

特殊标识符

这些不是严格的关键字,但在特定上下文中有特殊含义:

生命周期标识符

标识符含义示例
'static静态生命周期(整个程序运行期间)let s: &'static str = "hello";
'_匿名生命周期(编译器推断)fn func(x: &'_ str) { ... }

特殊路径

标识符含义示例
$crate宏中引用定义宏的 crate$crate::utils::helper()

特殊属性

标识符含义示例
cfg条件编译#[cfg(target_os = "linux")]
test标记测试函数#[test] fn test_add() { ... }
derive自动派生 Trait#[derive(Debug, Clone)]
allow/warn/denyLint 控制#[allow(dead_code)]

关键字使用注意事项

1. 原始标识符(Raw Identifiers)

如果需要使用关键字作为标识符名称,可以使用r#前缀:

// 使用关键字作为变量名letr#fn="function name";letr#match="match keyword";// 使用关键字作为函数名fnr#return()->i32{42}// 调用letresult=r#return();

使用场景

  • 与其他语言的 FFI 交互时,对方的函数名可能是 Rust 关键字
  • 与旧版本 Rust 代码兼容

2. 关键字的上下文敏感性

某些标识符只在特定上下文中是关键字:

// `union` 是关键字,但可以作为字段名structData{union:bool,// ❌ 编译错误}// 需要使用原始标识符structData{r#union:bool,// ✅ 正确}

3. Edition 差异

不同 Edition 的关键字可能不同:

// Rust 2015: `async` 不是关键字letasync=5;// ✅ 在 2015 Edition 中可以// Rust 2018+: `async` 是关键字letasync=5;// ❌ 编译错误letr#async=5;// ✅ 使用原始标识符

常见关键字组合模式

1. 函数定义模式

// 基本函数fnfunction_name(){}// 带参数和返回值fnadd(a:i32,b:i32)->i32{a+b}// 泛型函数fngeneric<T>(value:T)->T{value}// 带生命周期fnlongest<'a>(x:&'astr,y:&'astr)->&'astr{x}// 异步函数asyncfnfetch()->String{"data".to_string()}// Unsafe 函数unsafefndangerous(){}// 外部函数extern"C"fncallback(){}// 常量函数constfnconst_add(a:i32,b:i32)->i32{a+b}

2. 结构体与实现模式

// 定义结构体pubstructPoint{pubx:i32,puby:i32,}// 实现方法implPoint{pubfnnew(x:i32,y:i32)->Self{Self{x,y}}pubfndistance(&self)->f64{((self.x.pow(2)+self.y.pow(2))asf64).sqrt()}}// 实现 Traitimplstd::fmt::DisplayforPoint{fnfmt(&self,f:&mutstd::fmt::Formatter)->std::fmt::Result{write!(f,"({}, {})",self.x,self.y)}}

3. 模块与导入模式

// 定义模块modutils{pubfnhelper(){}pub(crate)fninternal(){}pub(super)fnparent_only(){}}// 导入usestd::collections::HashMap;usestd::io::{self,Read,Write};usecrate::utils::helper;usesuper::parent_function;// 重导出pubuseself::utils::helper;

4. 匹配与控制流模式

// match 表达式matchvalue{Some(x)ifx>0=>println!("positive"),Some(x)=>println!("non-positive"),None=>println!("none"),}// if letifletSome(x)=option_value{println!("{}",x);}// while letwhileletSome(x)=iterator.next(){println!("{}",x);}// for 循环foriin0..10{ifi%2==0{continue;}println!("{}",i);}// loop 带标签'outer:loop{loop{break'outer;}}

快速查找索引

按功能分类

变量与常量let,mut,const,static

类型定义struct,enum,union,type,trait

实现impl,fn

控制流if,else,match,loop,while,for,break,continue,return

模块系统mod,pub,use,crate,super,self,Self,extern

所有权ref,move,as

泛型与约束where,dyn

异步async,await

安全unsafe

macro_rules!

按字母排序

as,async,await,break,const,continue,crate,dyn,else,enum,extern,fn,for,if,impl,in,let,loop,match,mod,move,mut,pub,ref,return,self,Self,static,struct,super,trait,type,union,unsafe,use,where,while


本附录小结

  • Rust 当前有40+ 个活跃关键字,涵盖声明、控制流、模块、所有权、异步等各个方面
  • 保留关键字为未来功能预留,不能用作标识符
  • 使用原始标识符(r#keyword) 可以在必要时使用关键字作为名称
  • 不同Edition的关键字集合可能不同,升级时需注意
  • 理解关键字的组合模式有助于快速编写惯用的 Rust 代码

提示:将本速查表保存为书签,在编码时快速查阅!

http://www.jsqmd.com/news/1237565/

相关文章:

  • java,,
  • 微信小程序商城全栈开发:从架构到支付实战
  • 2026年常州市手机维修回收优质商家推荐 - 谁都没有我好看
  • 黑龙江校园对讲机通信解决方案,单工科技助力校园安全与管理升级
  • Spring Boot + Spring AI 实战:从聊天接口到 Function Calling,支撑日均千万级智能客服的架构演进
  • ASSOCIATED RESEARCH 7564SA 分析仪
  • Webhook 实战:准入控制与默认值注入
  • 国产化 ECU 刷写上位机(CAN FD)开发与实操指南
  • 基于AI与本地知识库的游戏动态攻略生成系统设计与实现
  • 小程序毕设项目:基于 SpringBoot 的基层社区养老保障资源整合平台 社区老人健康保障与帮扶服务小程序(源码+文档,讲解、调试运行,定制等)
  • C++编程竞赛中排列组合计算:从数学原理到高效代码实现
  • 第35章 开源贡献与持续成长
  • Java反应式编程核心原理与实践指南
  • 私域邦网络推三返一合规模式系统开发
  • 主权校验码技术解析:从加密算法到跨境应用
  • 哔咔漫画离线阅读终极指南:如何用免费工具快速构建个人漫画图书馆
  • 物业厂区对讲机选型与组网方案,黑龙江单工科技打造高效内部通信体系
  • AI 电动家居用品智能功率 覆盖电机驱动、加热控制、智能电源管理的完整选型方案
  • 2026常州市手机维修推荐 优质服务商实用指南 - 谁都没有我好看
  • iPhone邮件分类优化与手动修正全指南
  • 2026年门票印刷新趋势:性价比与质量兼得的供应商选择指南 - 米諾
  • 直播预约|基于 openJiuwen 的多 Agent 项目实战与系统构建
  • SAP PP 一些意料之外的报错
  • 固态储氢技术在快递物流行业的应用与突破
  • 数据集成平台哪家好?带你看懂ETLCloud和帆软的不同
  • Android功耗系列专题理论之十八:整机续航评估思路
  • 深入解析C2000 ePWM模块:从寄存器到实战配置指南
  • 2026年C#上位机开发:AI集成与跨平台技术趋势
  • Unity UGUI按钮透明区域点击穿透:原理、实现与性能优化
  • 2026 厦门翔安防水补漏公司排名推荐 卫生间屋顶地下室根治指南 - 苏易房屋修缮