Rust快速入门2

发布于: 2021-11-19T16:22:00+08:00
更新于: 2021-11-19T16:22:00+08:00
作者: Stiller

类别: Rust.

标签:Rust Linux

Cargo.toml中保存的是项目依赖和项目信息,如果需要使用第三方的模块,则需要在dependencies中增加内容。

[dependencies]
rand = "0.8.3"

然后使用cargo run命令会自动的进行依赖包的安装和构建。

官方的第一个练习:猜数字,使用到了rand模块

use std::io;
use rand::Rng;
fn main() {
    println!("输入你需要选择的数字!");
    let mut string_input = String::new();
    io::stdin().read_line(&mut string_input).expect("读取失败");
    println!("您输入的数目是{}", string_input);
    let radom_number = rand::thread_rng().gen_range(1..101);
    println!("随机数是{}", radom_number);
    if string_input == radom_number.to_string() {
        println!("恭喜你猜对了!");
    } else {
        println!("很遗憾你猜错了!");
    }
}

在Rust中需要对比两个不同类型的数据,需要进行显式的类型转换例如.to_string()或者是.parse()需要注意的是,在Rust中推荐的变量命名和函数命名类似于Python,需要进行下划线作为全部小写单词切分,而不是类似于Java,采用小写驼峰形式。

在Rust中存在一些特殊点:

  1. Rust变量可以进行遮蔽,也就是说定义一个x为int,但是可以在后续代码中新建一个变量x为字符,这两者并不是转化关系,而是完全独立
  2. 常量要求必须初始化值和类型,实际上并不一定需要是显示指定
  3. Rust中函数可以显式的return或者不显式直接会自动返回结果
  4. isize和usize和计算机系统有关一般不使用,默认整数类型是i32,浮点数优化后f64和f32计算速度近似,所以默认是f64
  5. Rust支持整数数列,支持开闭区间(1..5)=1,2,3,4;(1..=5)=1,2,3,4,5,结合for in可以实现类似于Python中 for in range的循环方式,.rev()方法可以直接反转数列
  6. Rust支持元组类型(),如果只有一个元素,需要在元素后跟随“,”来区分元组和括号表达式,同时元组支持嵌套和不同类型的数据存放在同一个元组中
  7. 数组类型支持省略初始化,类似于Python"*"符号的填充let arr=[1;5](let arr=[1,1,1,1,1])
  8. Vec数组类型是动态数组,可以增长和缩短容器,可以直接取值也可以使用get()方法来解决数组越界问题,内存是连续的存储块,只能存储相同类型的元素,所有的新元素会自动的添加在动态数组的尾部let mut v:Vec<i32>=Vec::new()或者可以创建指定长度的动态数组let mut v:Vec<i32>=Vec::with_capacity(10)也可使用宏来创建let mut v = vec![0;10],使用push()方法加入数据,pop()方法删除,remove可以删除指定索引,并将后方所有元素左移。
  9. VecDeque是一种双端队列,可以实现栈和队列功能(但是只能对两端元素进行操作,但是可以直接改变中间元素的值同时支持remove)push_front()/push_back(),pop_front()/pop_back()
  10. HashMap结构体要求键值对所有值都是同一类型,所有值也是同一类型,键不能重复。std::collections模块中,插入数据时使用entry和or_insert(检查是否有对应的值,没有对应的值就插入键值对),支持迭代器for in *。
  11. Rust中str是定长字符串,String是变长字符串本质是一个Vec\类型的结构体(指向堆上字节序列指针as_ptr堆上字节长度len分配堆容量capacity),如果对两个String类型的字符串使用“+/+=”会返回新的字符串,而不是追加字符串(String+str)。
  12. format!宏可以格式化String和&str。
  13. 字符串的便利是通过UTF-8编码的字节序列进行访问,字符处理时按char进行返回

链接