Rust – 零碎的小知识点
Rust – 零碎的小知识点

Rust – 零碎的小知识点

创建一个 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..

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注