前语

良久没学新言语了,最近计划学学Rust并记载一下Rust的要点,方便后期给自己参考。

快速装置

Macos | Linux

curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh

Windows

装置包下载地址

Visual Studio Code 插件

查找装置rust-analyzer即可

快速创立rust项目

cargo new 项目名称

项目结构如下

项目根目录
    - src
        - main.rs
    Cargo.toml

src下是源代码,Cargo.toml装备了项目的依赖,版本号等信息,cargo是rust的包管理工具

运转rust代码

通过Cargo创立的项目能够直接在项目根目录下运转

cargo run

假如单独建立一个rust源码文件,则能够运用rustc编译,然后手动执行编译产物

rustc app.rs && ./app

变量

界说

let int_var = 222;
int_var = 100; // error!

直接运用let界说时,变量不可被更改,增加mut才能够修正

let mut int_var = 222;
int_var = 100; // ok

效果域

变量只在当前效果域收效,效果域的界说相似于C,比方函数,操控句子的Body。当前效果域界说的同名变量能够掩盖父效果域的相应变量。

fn function() {
    let int_var = 100; // 只在函数内部收效
    if true {
        let int_var = 20;
        // 这儿访问到的int_var则是20
    }
}

常量

const THIS_IS_A_CONST: i64 = 10 * 200;

常量需求清晰指定类型,由const润饰,赋值表达式只能是编译时可计算出成果的。

办法

界说

fn function_name(param1: Type, param2: Type) -> ReturnType {
    return xxx;
    // or
    xxx
}

由关键字fn开头,参数列表由逗号隔开,参数名在前,类型追加在冒号后面,返回值类型在->符号后拼接。返回值能够运用return返回,也能够不写return,可是注意分号也要去掉。

调用

分为两种调用方法,相似于其他言语的类办法和实例办法,具体会在介绍mod时具体展开

xxx::classFunc()
xxx.instancFunc()

数据类型

品种

  • 整型:分为iXX和uXX系列,XX支撑8,16,32,64,128,直接十六进制(0x),八进制(0o),二进制(0b),Byte(b’A’)。默许i32
  • 浮点型:f32和f64,默许f64
  • 布尔值:bool,true或许false
  • 字符:char,支撑多字节字符,包含表情
  • tuple:元组,例如 let tup: (i32, f64, u8) = (500, 6.4, 1);
  • 数组:let arr = [1, 2, 3, 4, 5];

尽管rust是强类型言语,但假如编译器能推导出来类型,我们界说变量时都能够疏忽类型,这个和目前很多现代言语相似

let int_var = 222; // 这儿不必写i32
let int_var = xxx::funcReturnInt32Var(); // 这儿不必写i32

注释

单行

// hello, world

多行

文档上没有说这种注释方法,可是我试了一下的确能够

/*
Name:func
Param: arg1
*/

流程操控句子

if

// 惯例的if else
if a < 5 {
} else if b == 6 {
} else {
}
// 对标三目操作符
let a = if b==0 {someval} else {otherval};

loop

loop {
    // 永远运转
}

loop的break不仅退出循环,还能够返回一个值

let val = loop {
    ...
    break some_val;
}

while

和其他言语的while相似

while a < 5 {
    ...
    break;
}

for

和其他言语的for相似,对数组或许其他可迭代的目标进行元素遍历

for item in arr {
}