创建一个 1~n 的 Vec 或者数组可以通过 (1..=n).collect() 实现
let w: Vec = (1..=num).collect();
if let/ while let 可以简化 Option 类的匹配方式
let option = Some(12);
if let Some(x) = option {
res += x;
}
let mut optional = Some(0);
while let Some(i) = optional {
if i > 9 {
println!("Greater than 9, quit!");
optional = None;
} else {
println!("`i` is `{:?}`. Try again.", i);
optional = Some(i + 1);
}
}
元组构造体
struct ColorTupleStruct(i32, i32, i32);
let green = ColorTupleStruct(0, 255, 0);
构造体继承,但是要注意如果剩下的继承部分含有所有权为 Move 形式的变量则构造体所有权会转移
let your_order = Order {
name: String::from("Hacker in Rust"),
count: 1,
..order_template
};
构造体初始化简化语法,同名字段可以简化
fn build_user(email: String, username: String) -> User {
User {
active: true,
username,
email,
sign_in_count: 1,
}
}
HashMap 在原有元素的基础上修改
let mut scores: HashMap<String, Team> = HashMap::new();
let team = scores.entry(team_1_name).or_insert(Team{
goals_scored: 0, goals_conceded: 0
});
*team = Team{
goals_scored: team.goals_scored + team_1_score, goals_conceded: team.goals_conceded + team_2_score
};
let team = scores.entry(team_2_name).or_insert(Team{
goals_scored: 0, goals_conceded: 0
});
*team = Team{
goals_scored: team.goals_scored + team_2_score, goals_conceded: team.goals_conceded + team_1_score
};
Unwrap 方法能够简化掉一个方法返回的 Result
unwrap 方法虽然能够简化返回的 Result,但是其仍然会存在 panic。
unwrap 方法同样也能简化 Option,但是如果返回了 None,也会触发 panic。
let p: Person = match serde_json::from_str(data) {
Ok(p) => p,
Err(e) => panic!("cannot parse JSON {:?}, e"), //panic
}
let p:Person = serde_json::from_str(data).unwrap();
lifetime..