🦀 Rust 表达式快问快答

测试你对 Rust 表达式、语句和控制流的理解

10
题目数量
18
预计时间(分钟)
⭐⭐⭐
难度等级
第1题 (判断题)
在Rust中,表达式和语句是相同的概念,都会返回值。
正确
错误

答案解析:

答案:错误

表达式(expression)会计算并返回一个值,而语句(statement)执行某些操作但不返回值。

例如:`5 + 3`是表达式,返回8;`let x = 5;`是语句,不返回值。

函数体由一系列语句组成,可选地以表达式结尾。

第2题 (选择题)
下面哪个是Rust中的表达式?
let x = 5;
x + 1
fn main() {}
use std::io;

答案解析:

答案:x + 1

`x + 1`是一个表达式,它计算x与1的和并返回结果。

`let x = 5;`是变量绑定语句,`fn main() {}`是函数定义语句,`use std::io;`是导入语句。

表达式可以是算术运算、函数调用、代码块等。

第3题 (选择题)
以下代码的输出是什么?
fn main() { let x = { let y = 3; y + 1 }; println!("{}", x); }
3
4
编译错误
运行时错误

答案解析:

答案:4

代码块`{}`是一个表达式,它的值是最后一个表达式的值。

在这个代码块中,`y + 1`是最后一个表达式,计算结果是4。

注意`y + 1`后面没有分号,如果加了分号就变成语句,代码块返回`()`。

第4题 (判断题)
在Rust中,if是一个表达式,可以用来赋值。
正确
错误

答案解析:

答案:正确

if是表达式,可以返回值并用于赋值:`let x = if condition { 5 } else { 6 };`

if表达式的所有分支必须返回相同类型的值。

如果没有else分支,if表达式返回`()`类型。

第5题 (选择题)
下面哪个loop表达式的用法是正确的?
A: let result = loop { break 42; }; B: let result = loop { return 42; }; C: let result = loop { 42 }; D: let result = loop { continue 42; };
A
B
C
D

答案解析:

答案:A

loop表达式可以通过`break`返回值:`break 42`使loop返回42。

B: `return`会从整个函数返回,不是从loop返回。

C: 没有break会导致无限循环。

D: `continue`不能携带值,语法错误。

第6题 (简答题)
在Rust中,match表达式必须是什么的?(一个英文单词)

答案解析:

答案:exhaustive(穷尽的)

match表达式必须是穷尽的,即必须覆盖所有可能的情况。

如果没有覆盖所有情况,编译器会报错。

可以使用`_`通配符来匹配剩余的所有情况。

第7题 (选择题)
以下哪个表达式会导致编译错误?
if true { 1 } else { 2 }
if true { 1 } else { "hello" }
match 1 { 1 => "one", _ => "other" }
{ let x = 5; x * 2 }

答案解析:

答案:if true { 1 } else { "hello" }

if表达式的所有分支必须返回相同类型的值。

这里if分支返回i32类型的1,else分支返回&str类型的"hello",类型不匹配。

其他选项都是类型一致的表达式。

第8题 (判断题)
在Rust中,函数的最后一行如果没有分号,该行就是函数的返回值。
正确
错误

答案解析:

答案:正确

函数体是一个表达式,最后一行没有分号的表达式就是返回值。

例如:`fn add(x: i32, y: i32) -> i32 { x + y }`

也可以使用`return`关键字显式返回,但通常不必要。

第9题 (选择题)
以下代码的输出是什么?
fn main() { let x = if true { 5 } else { 6 }; println!("{}", x); }
5
6
true
编译错误

答案解析:

答案:5

条件`true`为真,所以if表达式执行第一个分支,返回5。

if表达式的值被赋给变量x,然后打印出来。

这是if表达式用于赋值的典型例子。

第10题 (简答题)
在Rust中,什么符号用来结束语句?

答案解析:

答案:分号(;)

分号用来结束语句,将表达式转换为语句。

例如:`let x = 5;`是语句,`5`是表达式。

在代码块中,最后一行不加分号可以作为返回值。

🎉
恭喜完成测验!
10/10
你对Rust表达式的掌握非常出色!