Rust 学习笔记:关于模式匹配的练习题
Rust 学习笔记:关于模式匹配的练习题
参考视频:
- https://www.bilibili.com/video/BV1YxojYJESm
问题一
以下代码能否通过编译?若能,输出是?
fn main() {
let mut v = vec![(1, 2), (3, 4)].into_iter();
let mut sum = 0;
while let Some(t) = v.next() {
let (_, n) = t;
sum += n;
}
println!("{}", sum);
}
答:可以通过编译。输出 6。
问题二
考虑对某种类型 T 的表达式进行模式匹配。以下哪一项最能准确描述可反驳模式(refutable pattern)和不可反驳模式(irrefutable pattern)之间的区别?
A. 可反驳模式是指当 T 是枚举类型时的模式,而不可反驳模式是指当 T 不是枚举类型时的模式。
B. 可反驳模式无法匹配任何 T 类型的值,而不可反驳模式能匹配 T 类型的一部分值。
C. 可反驳模式不能匹配某些 T 类型的值,而不可反驳模式能匹配所有 T 类型的值。
D. 可反驳模式匹配某种不同类型 S 的部分值,而不可反驳模式只能匹配 T 类型的值。
答:C。
问题三
考虑以下程序:
let x: &[(i32, i32)] = &[(0, 1)];
在这段代码里,以下哪些是对变量 x 进行匹配时的可反驳模式?
A. &[..]
B. &[(x, y)]
C. &[(x, y), ..]
D. _
答:B、C。