前语
良久没学新言语了,最近计划学学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 {
}