🦀 Rust Crate 与模块快问快答

测试你对 Rust crate、模块系统和包管理的理解

10
题目数量
18
预计时间(分钟)
⭐⭐⭐
难度等级
第1题 (判断题)
在Rust中,一个crate可以包含多个模块,但一个模块不能跨越多个crate。
正确
错误

答案解析:

答案:正确

crate是Rust的编译单元,一个crate可以包含多个模块。

模块是crate内部的组织单元,不能跨越crate边界。

如果需要在多个crate之间共享代码,需要通过依赖关系来实现。

第2题 (选择题)
下列哪个关键字用于声明一个模块?
crate
mod
use
pub

答案解析:

答案:mod

mod关键字用于声明模块,例如:mod my_module { ... }

crate是编译单元的根,use用于引入项目,pub用于控制可见性。

模块可以是内联的(在同一文件中)或外部的(在单独文件中)。

第3题 (选择题)
在Cargo.toml文件中,[dependencies]部分用于指定什么?
项目的基本信息
外部依赖的crate
编译配置选项
测试配置

答案解析:

答案:外部依赖的crate

[dependencies]部分列出了项目所依赖的外部crate及其版本。

例如:serde = "1.0"表示依赖serde crate的1.0版本。

Cargo会自动下载和管理这些依赖。

第4题 (判断题)
默认情况下,Rust中的模块和函数都是私有的,需要使用pub关键字才能被外部访问。
正确
错误

答案解析:

答案:正确

Rust遵循"默认私有"原则,所有项目默认都是私有的。

只有显式使用pub关键字标记的项目才能被外部模块访问。

这有助于封装和信息隐藏,提高代码的安全性。

第5题 (选择题)
下面哪个use语句的语法是正确的?
A: use std::collections::HashMap; B: import std::collections::HashMap; C: include std::collections::HashMap; D: require std::collections::HashMap;
A
B
C
D

答案解析:

答案:A

Rust使用use关键字来引入其他模块中的项目。

import、include、require是其他语言的关键字,在Rust中不存在。

use语句可以使用通配符(*)、重命名(as)等功能。

第6题 (简答题)
在Rust项目中,main.rs和lib.rs文件分别代表什么类型的crate?

答案解析:

答案:binary crate, library crate

main.rs是binary crate的入口点,用于创建可执行程序。

lib.rs是library crate的入口点,用于创建可被其他项目使用的库。

一个项目可以同时包含binary和library crate。

第7题 (选择题)
super关键字在模块系统中的作用是什么?
引用当前模块
引用父模块
引用根模块
引用子模块

答案解析:

答案:引用父模块

super关键字用于访问父模块中的项目,类似于文件系统中的".."。

self关键字引用当前模块,crate关键字引用根模块。

使用super可以避免写出完整的模块路径。

第8题 (判断题)
在Rust中,可以使用use语句将多个项目一次性引入,例如use std::collections::{HashMap, HashSet}。
正确
错误

答案解析:

答案:正确

Rust支持使用花括号{}来一次性引入多个项目。

这种语法可以减少重复的use语句,使代码更简洁。

也可以使用通配符*来引入模块中的所有公共项目。

第9题 (选择题)
下面哪个命令用于创建一个新的Rust项目?
cargo build
cargo new
cargo run
cargo init

答案解析:

答案:cargo new

cargo new用于创建一个全新的Rust项目,包含基本的目录结构和文件。

cargo init用于在现有目录中初始化Rust项目。

cargo build用于编译项目,cargo run用于运行项目。

第10题 (简答题)
在Cargo.toml中,如果要指定依赖serde的版本为1.0以上但小于2.0,应该如何写版本号?

答案解析:

答案:^1.0 或 1.0

^1.0表示兼容1.0版本,允许1.0.x到1.x.x的版本,但不包括2.0。

这是Cargo的默认版本策略,遵循语义化版本控制。

也可以使用~1.0(只允许1.0.x)或=1.0(精确版本)等格式。

🎉
恭喜完成测验!
10/10
你对Rust crate与模块系统的掌握非常出色!