rust开发笔记

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后的模块化分类似

rust中文文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

错对对

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值