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 --doc
也未成功
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 对外提供,因此它可以享受编译器的类型推导能力,无需标注参数和返回值的类型。
为了增加代码可读性,有时候我们会显式地给类型进行标注,出于同样的目的,也可以给闭包标注类型:
网友评论