Skip to content

RUST语言学习

· 7 min · 语言学习 / RUST / 学习笔记

一、Rust环境搭建#

这里介绍简单的Linux下Rust环境搭建,可以使用Windows或者Linux。

Rust有一个官方的工具来管理Rust的安装和更新,可以直接下载使用脚本一键安装。

Terminal window
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

在安装过程中直接按y同意继续安装即可。

在安装的最后会要求更新环境变量,按照命令行给出的提示操作即可。

二、Cargo教程#

Cargo是Rust官方的项目管理器,也是一个包管理器,可以通过Cargo操作Rust项目也可以用来管理社区的Rust包。

安装Rust会自动安装Cargo。

cargo build默认构建的是debug版本的,要使用cargo build --release来构建Release版本的软件,这时候会进行大量的优化,增加编译时间但是提高运行效率。可以直接运行编译后的可执行文件,也可以使用cargo run -- release来运行

Cargo进行项目管理,主要是利用Cargo.lock和Cargo.toml两个文件。

三、数据类型#

Rust是强类型语言,也就是说具有自动判断变量类型的能力。 Rust定义的变量默认是不可变的,如果要可变的话需要在变量前面加上mut来修饰。

整数类型(Integer)#

整数型分为有符号和无符号两种,根据位长度又分为不同的类型。

arch的位长度代表着目前平台的位长度。

可以用不同的进制表示整型,在一个比较长的数字中加入下划线可以增加可读性。

浮点型(FloatintPoint)#

Rust支持64位浮点和32位浮点。默认是64位浮点。

Rust不支持**++或者—这样的变量自增自减语法**。

布尔型#

布尔型用bool表示,只有true和false。

字符型#

字符型用char表示,Rust中的char长度为4个字节。

元组#

元组是用()括起来的一堆数据,可以是不同的数据类型。

可以使用.来对一个元组其中的数据进行读取。

元组的数据类型和个数一旦定义就不能被改变,长度固定无法动态增加或减少元素。

let a:(i64, f64, i16) = (1, 2.0, 3); //声明
println!("{}",a.1); //使用

数组#

数组和c语言很像。

let mut a = [1,2,3]; //声明
println!("{}",a[0]); //使用
let mut b: [i32: 5] = [1, 2, 3, 4, 5]; //声明定义一个元素为i32,长度为5的数组

四、Rust注释#

Rust使用 // 单行注释,使用 /// 进行多行注释。

在一个函数之前进行多行注释,可以作为文档说明注释,将来使用这个函数时就可以看到对应的说明。

/// 将一个数字加到另一个数字上
///
///#example
/// let x = add(1, 2);
///
fn add(a: i32, b: i32) -> i32{
return a + b /*这也是一个注释*/
}
/*多行注释
*多行注释
*/

五、Rust函数#

Rust函数的基本格式如下。

fn function_name(a: i32, b: i64) -> i64(
//函数体
)

所有函数开头都是 fn ,后面是函数名,再往后是入参,然后箭头指向返回值的类型。

函数可以在任何被访问到的地方进行定义,不是必须在其被调用之前进行定义

Rust函数体和表达式#

可以用 **{}**包括一个复杂的表达式。

let a = {
let b = 1;
b + 1
};
//最后a的值就是b+1

同样的函数体也可以以一个数值表达式结尾。

除了以表达式结尾,还可以是return返回值。

六、条件语句#

let mut a = 1;
let mut b = 2;
if a < 1 {
b += 1;
}
else if a >= 1 && a < 2 {
b += 2;
}
else {
b += 3;
}

条件判断语句中的条件,必须是bool类型,并且不允许使用**小括号()**包括起来。

即使是单条语句也必须使用**大括号{}**包括起来。

并且if else可以作为函数体表达式,也就是说可以将条件判断的执行语句直接作为返回值。

let a:i32 = if b > 1 {1} else {0};

七、循环#

1. while循环#

let mut a = 0;
let mut i = 0;
while i < 10 {
a += i;
i += 1;
}

while循环和if类似,其条件判断语句不用加括号。C语言中的for循环一般使用while结构来实现。

2. for循环#

let a: [i32: 3] = [1, 2, 3];
for i in 0..2 {
println!("{}", a[i]);
}
//使用0..2作为一个range迭代器
for i in a.iter() {
println!("{}", a[i]);
}
//直接使用数组的迭代器

在for循环中的i,是一个每次循环被定义的不可变变量,本质上其值等于迭代器,换句话说for循环和迭代器是绑定的。

3. loop循环#

loop 循环是一个无限循环,在循环内部判断循环条件然后跳出循环。

let mut a = 1;
loop {
a += 2;
println!("{}", a);
if a > 10{
println!("{}", a);
break;
}
}

八、迭代器#