为什么标识符不能以数字开头?Rust练习文件按序命名有什么方案?
Rust 禁止数字开头标识符的原因
这是绝大多数通用编程语言的通用设计规范,核心出发点有两个:
- 降低词法分析复杂度:编译器的词法分析阶段扫描字符时,如果允许数字开头的标识符,碰到首字符为数字的内容时,无法直接判定它是数字字面量还是标识符,需要额外回溯判断,既会拖慢编译速度,也容易引入语法歧义。比如
123abc这种内容,无法直接区分是标识符还是带后缀的数字字面量。 - 保障代码可读性:数字开头的标识符极易和数字字面量混淆,会显著提升代码的理解成本,不符合Rust优先保障代码可读性的设计原则。
Rust的标识符规则明确要求:标识符必须以ASCII字母或者下划线_开头,后续字符可以是ASCII字母、数字、下划线。
标注练习文件顺序的可行方案
- 前缀加下划线:直接把文件名改为
_1_add.rs,引入时写mod _1_add;即可正常编译,改造成本极低,顺序识别度和原命名完全一致。 - 前缀加练习专属标识:比如统一加
ex、p这类前缀,把文件名改为ex1_add.rs,引入时写mod ex1_add;,语义更明确,一眼就能识别是第1个练习。 - 不修改原文件名的兼容方案:如果不想改动已经存在的数字开头文件名,可以通过
#[path]属性手动指定文件路径,再搭配合法的模块名即可,示例代码如下:
// lib.rs 中写法 #[path = "1_add.rs"] mod add_1; // 这里的模块名只要符合标识符规则即可
- 目录分层管理:如果练习数量较多,可以按系列建目录,目录也用相同的命名规则,比如
exercises/ex1_add/mod.rs,引入时只需要声明根模块mod exercises;,后续可以通过exercises::ex1_add调用对应练习的代码。
内容的提问来源于stack exchange,提问作者R.yan
相关产品推荐
相关产品推荐

