rust开发笔记
集合
vector
创建集合的方式
1、通过Vec::new()
函数
2、vec!
宏
let v:Vec<i32> = Vec::new();
let v = vec![1,2,3]
更新删除集合
let mut v=Vec::new();
v.push(2);//增加
v.remove(0);//删除 下标
读取元素
let mut v: Vec<i32> = vec![100, 32, 57];
let does_not_exist = &v[100];
let does_not_exist1 = v.get(0);
// let frist =&v[0];
// v.push(3);
match does_not_exist1 {
Some(third) => println!("The third element is {:?}", third),
None => println!("There is no third element."),
}
println!("打印数值:{}", does_not_exist);
两种方式读取元素,索引语法或者 get
方法。
Rust 有两个引用元素的方法的原因是程序可以选择如何处理当索引值在 vector 中没有对应值的情况。
当运行这段代码,你会发现对于第一个 []
方法,当引用一个不存在的元素时 Rust 会造成 panic。这个方法更适合当程序认为尝试访问超过 vector 结尾的元素是一个严重错误的情况,这时应该使程序崩溃。
当 get
方法被传递了一个数组外的索引时,它不会 panic 而是返回 None
。当偶尔出现超过 vector 范围的访问属于正常情况的时候可以考虑使用它。接着你的代码可以有处理 Some(&element)
或 None
的逻辑,
相同作用域中同时存在可变和不可变引用的规则 – RUST 所有权
遍历
for i in &mut v {
*i += 50;
print!("打印数值:{}", i);
}
存储多种类型的值
#[derive(Debug)]
enum SpreadsheetCell {
Int(i32),
Float(f64),
Text(String),
}
let mut row = vec![
SpreadsheetCell::Int(3),
SpreadsheetCell::Text(String::from("blue")),
SpreadsheetCell::Float(10.12),
];
print!("打印数值:{:?}", row);
for i in &mut row {
print!("打印数值:{:?}", i);
}
Rust 在编译时就必须准确的知道 vector 中类型的原因在于它需要知道储存每个元素到底需要多少内存。第二个好处是可以准确的知道这个 vector 中允许什么类型.
文件分层
自定义lib
使用命令 创建自定义lib文件包
$ cargo new snakes --lib
在自定义lib.rs编写自定义函数
pub fn run() {....}
在项目Cargo.toml
文件中增加刚才创建的依赖
[dependencies]
snakes= { path = "snakes"}#指定文件路径 最好用相对路径
现在就可以使用我们新建lib中的mod
use snakes;
fn main() {
snakes::run();
}
切分目录文件
创建要切分的目录
|-- front_of_house
| |-- hosting.rs
| |-- mod.rs
`-- main.rs
hosting
.rs
pub fn add_to_waitlist() {
println!("add_to_waitlist");
}
pub fn seat_at_table() {}
mod.rs
pub mod hosting;
pub mod serving {
fn take_order() {}
fn server_order() {}
fn take_payment() {}
}
main.rs
pub mod front_of_house;
use crate::front_of_house::hosting;
fn main() {
hosting::add_to_waitlist();
}
模块划分的优势在于 你可以选择性暴露自己想要的东西 ,和java9后的模块化分类似