2022-07-21

2022-07-21  本文已影响0人  wwmin_

1. Rust自动生成文档

cargo doc --open

路径为: [root]/target/doc/[项目名称]/index.html
在模块文档最上面添加

//! 计算一些你口算算不出来的复杂算术题

如:

//! 计算一些你口算算不出来的复杂算术题

use std::collections::{HashMap};
/// 这个是测试啦
#[allow(dead_code)]
pub fn t1() {
    let teams_list = vec![
        ("中国队".to_string(), 100),
        ("美国队".to_string(), 10),
        ("日本队".to_string(), 50),
    ];
    let mut teams_map: HashMap<_, _> = teams_list.into_iter().collect();
    let chinese_team = teams_map.get(&"中国队".to_string());
    assert_eq!(chinese_team, Some(&100));
    match chinese_team {
        Some(100) => println!("{}", &100),
        _ => println!("无")
    }

    println!("{:?}", teams_map);

    let england = "英国队".to_string();
    let count = teams_map.entry(england).or_insert(20);
    *count += 1;
    println!("{}", *count);
}

/**
 也可以用块注释哦
*/
pub fn t2(){
    
}

如下图所示:


代码注释
函数注释

2. 文档注释中添加测试用例

并使用命令cargo test执行测试

/// `add_one` 将指定值加1
///
/// # Examples11
///
/// ```rust
/// let arg = 5;
/// let answer = webtool::hash_map::add_one(arg);
///
/// assert_eq!(6, answer);
/// ```
#[allow(dead_code)]
pub fn add_one(x: i32) -> i32 {
    x + 1
}
带有测试用例的注释

测试结果


cargo test

3. Rust借用规则

可变借用与不可变借用不能同时存在的规则
借用的规则:要么多个不可变借用,要么一个可变借用。
引用的生命周期从借用处开始,一直持续到最后一次使用的地方。

4. 闭包

经典案例

fn work_start() {
    //动作次数
    let intensity = 10;
    // 随机值用来决定某个选择
    let random_number = 7;

    // 开始健身
    workout(intensity, random_number);
}

#[allow(dead_code)]
fn workout(intensity: u32, random_number: u32) {
    let action = || {
        println!("muuuu......");
        thread::sleep(Duration::from_secs(2));
        intensity
    };

    if intensity < 25 {
        println!(
            "今天活力满满,先做 {} 个俯卧撑!",
            action()
        );
        println!(
            "旁边有妹子在看,俯卧撑太low,再来 {} 组卧推!",
            action()
        );
    } else if random_number == 3 {
        println!("昨天练过度了,今天还是休息下吧!");
    } else {
        println!(
            "昨天练过度了,今天干干有氧,跑步 {} 分钟!",
            action()
        );
    }
}

类型标注
Rust 是静态语言,因此所有的变量都具有类型,但是得益于编译器的强大类型推导能力,在很多时候我们并不需要显式地去声明类型,但是显然函数并不在此列,必须手动为函数的所有参数和返回值指定类型,原因在于函数往往会作为 API 提供给你的用户,因此你的用户必须在使用时知道传入参数的类型和返回值类型。

与函数相反,闭包并不会作为 API 对外提供,因此它可以享受编译器的类型推导能力,无需标注参数和返回值的类型。

为了增加代码可读性,有时候我们会显式地给类型进行标注,出于同样的目的,也可以给闭包标注类型:

上一篇 下一篇

猜你喜欢

热点阅读