答案解析:
答案:错误
表达式(expression)会计算并返回一个值,而语句(statement)执行某些操作但不返回值。
例如:`5 + 3`是表达式,返回8;`let x = 5;`是语句,不返回值。
函数体由一系列语句组成,可选地以表达式结尾。
答案解析:
答案:x + 1
`x + 1`是一个表达式,它计算x与1的和并返回结果。
`let x = 5;`是变量绑定语句,`fn main() {}`是函数定义语句,`use std::io;`是导入语句。
表达式可以是算术运算、函数调用、代码块等。
答案解析:
答案:4
代码块`{}`是一个表达式,它的值是最后一个表达式的值。
在这个代码块中,`y + 1`是最后一个表达式,计算结果是4。
注意`y + 1`后面没有分号,如果加了分号就变成语句,代码块返回`()`。
答案解析:
答案:正确
if是表达式,可以返回值并用于赋值:`let x = if condition { 5 } else { 6 };`
if表达式的所有分支必须返回相同类型的值。
如果没有else分支,if表达式返回`()`类型。
答案解析:
答案:A
loop表达式可以通过`break`返回值:`break 42`使loop返回42。
B: `return`会从整个函数返回,不是从loop返回。
C: 没有break会导致无限循环。
D: `continue`不能携带值,语法错误。
答案解析:
答案:exhaustive(穷尽的)
match表达式必须是穷尽的,即必须覆盖所有可能的情况。
如果没有覆盖所有情况,编译器会报错。
可以使用`_`通配符来匹配剩余的所有情况。
答案解析:
答案:if true { 1 } else { "hello" }
if表达式的所有分支必须返回相同类型的值。
这里if分支返回i32类型的1,else分支返回&str类型的"hello",类型不匹配。
其他选项都是类型一致的表达式。
答案解析:
答案:正确
函数体是一个表达式,最后一行没有分号的表达式就是返回值。
例如:`fn add(x: i32, y: i32) -> i32 { x + y }`
也可以使用`return`关键字显式返回,但通常不必要。
答案解析:
答案:5
条件`true`为真,所以if表达式执行第一个分支,返回5。
if表达式的值被赋给变量x,然后打印出来。
这是if表达式用于赋值的典型例子。
答案解析:
答案:分号(;)
分号用来结束语句,将表达式转换为语句。
例如:`let x = 5;`是语句,`5`是表达式。
在代码块中,最后一行不加分号可以作为返回值。