语句与表达式 示例 fn main() {
let x = 5u32;
let y = {
let x_squared = x * x;
let x_cube = x_squared * x;
// 下面表达式的值将被赋给 `y`
x_cube + x_squared + x
};
let z = {
// 分号让表达式变成了语句,因此返回的不再是表达式 `2*x` 的值,而是语句的值 `()` 2 * x;
};
println!("x is {:?}", x);
println!("y is {:?}", y);
println!("z is {:?}", z);
} 练习
1.
🌟🌟
// 使用两种方法让代码工作起来 fn main() {
let v = {
let mut x = 1;
x += 2 };
assert_eq!(v, 3);
}
2.
fn main() {
let v = (let x = 3);
assert!(v == 3);
}
3.
fn main() {
let s = sum(1 , 2);
assert_eq!(s, 3);
}
fn sum(x: i32, y: i32) -> i32 {
x + y;
}
你可以在这里找到答案(在 solutions 路径下)
🌟
🌟
函数
1.
fn main() {
// 不要修改下面两行代码! let (x, y) = (1, 2); let s = sum(x, y);
assert_eq!(s, 3);
}
fn sum(x, y: i32) {
x + y;
}
2.
fn main() {
print();
}
// 使用另一个类型来替代 i32 fn print() -> i32 {
println!("hello,world");
}
3.
🌟🌟🌟
🌟🌟
🌟🌟🌟
// 用两种方法求解 fn main() {
never_return();
}
fn never_return() -> ! {
// 实现这个函数,不要修改函数签名!
}
4.
发散函数( Diverging function )不会返回任何值,因此它们可以用于替代需要返回任何值的地
方
🌟🌟
fn main() {
println!("Success!");
}
fn get_option(tp: u8) -> Option<i32> {
match tp {
1 => {
// TODO
}
_ => {
// TODO
}
};
// 这里与其返回一个 None,不如使用发散函数替代
never_return_fn()
}
// 使用三种方法实现以下发散函数 fn never_return_fn() -> ! {
}
5.