🦀 Rust 枚举与模式匹配快问快答

测试你对 Rust 枚举类型和模式匹配的理解

10
题目数量
22
预计时间(分钟)
⭐⭐⭐
难度等级
第1题 (判断题)
在Rust中,枚举的每个变体都可以包含不同类型和数量的数据。
正确
错误

答案解析:

答案:正确

Rust的枚举非常灵活,每个变体可以包含不同类型和数量的数据。

例如:enum Message { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColor(i32, i32, i32) }

这使得枚举比其他语言中的枚举更加强大和表达力丰富。

第2题 (选择题)
下列哪个是Rust中Option枚举的正确定义?
enum Option<T> { Some(T), None(T) }
enum Option<T> { Some(T), None }
enum Option<T> { Some, None }
enum Option<T> { Some(T), Empty }

答案解析:

答案:enum Option<T> { Some(T), None }

Option是Rust标准库中最重要的枚举之一,用于表示可能存在或不存在的值。

Some(T)包含一个类型为T的值,None表示没有值。

这个设计避免了空指针异常,是Rust内存安全的重要组成部分。

第3题 (选择题)
在match表达式中,下划线(_)的作用是什么?
表示变量名
匹配所有其他情况
表示空值
表示错误

答案解析:

答案:匹配所有其他情况

下划线(_)是一个通配符模式,用于匹配所有其他未明确处理的情况。

它通常用作match表达式的最后一个分支,确保所有可能的值都被处理。

这有助于满足Rust的穷尽性检查要求。

第4题 (判断题)
Rust的match表达式必须穷尽所有可能的模式,否则编译器会报错。
正确
错误

答案解析:

答案:正确

Rust的match表达式要求穷尽性(exhaustiveness),必须处理所有可能的情况。

如果没有覆盖所有模式,编译器会产生错误。

这确保了程序的安全性,防止遗漏某些情况的处理。

第5题 (选择题)
下面哪个代码片段正确地使用了if let语法?
A: if let Some(x) = option_value { println!("{}", x); } B: if let Some(x) == option_value { println!("{}", x); } C: if Some(x) = option_value { println!("{}", x); } D: if let option_value = Some(x) { println!("{}", x); }
A
B
C
D

答案解析:

答案:A

if let是一种简化的模式匹配语法,用于只关心一种匹配情况的场景。

语法格式是:if let 模式 = 表达式 { 代码块 }

B使用了==比较而不是模式匹配;C缺少let关键字;D的模式和值位置颠倒了。

第6题 (简答题)
Result枚举有哪两个变体?请写出它们的名称。

答案解析:

答案:Ok, Err

Result<T, E>枚举用于表示可能成功或失败的操作结果。

Ok(T)表示成功,包含成功的值;Err(E)表示失败,包含错误信息。

这是Rust错误处理的核心机制,避免了异常的使用。

第7题 (选择题)
在模式匹配中,..语法的作用是什么?
表示重复
忽略剩余部分
表示范围
表示可选

答案解析:

答案:忽略剩余部分

..语法用于忽略结构体、元组或数组中的剩余字段或元素。

例如:let (first, ..) = tuple; 只提取第一个元素,忽略其余部分。

这在只关心部分数据时非常有用。

第8题 (判断题)
在Rust中,可以为枚举实现方法,就像为结构体实现方法一样。
正确
错误

答案解析:

答案:正确

Rust允许为枚举实现方法,使用impl块语法。

例如:impl Message { fn call(&self) { /* 方法实现 */ } }

这使得枚举不仅可以存储数据,还可以定义行为。

第9题 (选择题)
下面哪个是正确的范围模式匹配语法?
1...5
1..=5
1-5
1:5

答案解析:

答案:1..=5

Rust使用..=语法表示包含范围的模式匹配,匹配从1到5(包括5)。

..语法表示不包含结束值的范围,但在模式匹配中通常使用..=。

...语法已被弃用,现在使用..=替代。

第10题 (简答题)
在模式匹配中,如何绑定匹配的值到一个变量?请写出关键字。

答案解析:

答案:@

@操作符用于在模式匹配中绑定值到变量,同时进行模式测试。

例如:match x { n @ 1..=12 => println!("月份: {}", n), _ => {} }

这样既可以测试值是否在范围内,又可以使用绑定的变量n。

🎉
恭喜完成测验!
10/10
你对Rust枚举与模式匹配的掌握非常出色!