变量解构
8. 我们可以将 let 跟一个模式一起使用来解构一个元组,最终将它解构为多个独立的变量 提示: 可以使用变量遮蔽或可变性 🌟🌟
🌟🌟 🌟
// 修复下面代码的错误并尽可能少的修改 fn main() {
let (x, y) = (1, 2);
x += 2;
assert_eq!(x, 3);
assert_eq!(y, 2);
}
解构式赋值
该功能于 Rust 1.59 版本引入:你可以在赋值语句的左式中使用元组、切片或结构体进行匹配赋值。 9.
Note: 解构式赋值只能在 Rust 1.59 或者更高版本中使用
fn main() {
let (x, y);
(x,..) = (3, 4);
[.., y] = [1, 2];
// 填空,让代码工作 assert_eq!([x,y], __);
}
答案 在 solutions 下面
🌟🌟
基本类型
学习资料:
English: Rust Book 3.2 and 3.3 简体中文: Rust语言圣经 - 基本类型
数值类型 整数
1.
Tips: 如果我们没有显式的给予变量一个类型,那编译器会自动帮我们推导一个类型
// 移除某个部分让代码工作 fn main() {
let x: i32 = 5;
let mut y: u32 = 5;
y = x;
letz=10;// 这里 z 的类型是?
}
2.
// 填空
fn main() {
let v: u16 = 38_u8 as __;
}
3.
🌟🌟🌟
🌟
🌟
Tips: 如果我们没有显式的给予变量一个类型,那编译器会自动帮我们推导一个类型
// 修改 `assert_eq!` 让代码工作 fn main() {
let x = 5;
assert_eq!("u32".to_string(), type_of(&x));
}
// 以下函数可以获取传入参数的类型,并返回类型的字符串形式,例如 fn type_of<T>(_: &T) -> String {
format!("{}", std::any::type_name::<T>())
}
"i8", "u8", "i32", "u32"
4.
// 填空,让代码工作 fn main() {
assert_eq!(i8::MAX, __);
assert_eq!(u8::MAX, __);
}
5.
🌟🌟
🌟🌟
// 解决代码中的错误和 `panic` fn main() {
let v1 = 251_u8 + 8;
let v2 = i8::checked_add(251, 8).unwrap();
println!("{},{}",v1,v2);
}
6.
// 修改 `assert!` 让代码工作 fn main() {
let v = 1_024 + 0xff + 0o77 + 0b1111_1111;
assert!(v == 1579);
}
浮点数
7.
// 将 ? 替换成你的答案 fn main() {
let x = 1_000.000_1; // ?
let y: f32 = 0.12; // f32
let z = 0.01_f64; // f64
}
8. 使用两种方法来让下面代码工作
🌟🌟
🌟🌟
🌟
fn main() {
assert!(0.1+0.2==0.3);
}
序列Range
9. 两个目标: 1. 修改 assert! 让它工作 2. 让 println! 输出: 97 - 122 fn main() {
let mut sum = 0;
for i in -3..2 {
sum += i
}
assert!(sum == -3);
for c in 'a'..='z' {
println!("{}",c);
} }
10. // 填空
use std::ops::{Range, RangeInclusive}; fn main() {
assert_eq!((1..__), Range{ start: 1, end: 5 });
assert_eq!((1..__), RangeInclusive::new(1, 5));
}