一、Rust环境搭建
这里介绍简单的Linux下Rust环境搭建,可以使用Windows或者Linux。
Rust有一个官方的工具来管理Rust的安装和更新,可以直接下载使用脚本一键安装。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
在安装过程中直接按y同意继续安装即可。
在安装的最后会要求更新环境变量,按照命令行给出的提示操作即可。
二、Cargo教程
Cargo是Rust官方的项目管理器,也是一个包管理器,可以通过Cargo操作Rust项目也可以用来管理社区的Rust包。
安装Rust会自动安装Cargo。
- 使用Cargo新建一个项目工程
Cargo new my_project - 使用Cargo编译工程
Cargo build - 使用Cargo运行可执行文件(编译并运行)
Cargo run - 使用Cargo进行编译检查(比直接进行编译要快,适合快速检查错误)
Cargo check
cargo build默认构建的是debug版本的,要使用cargo build --release来构建Release版本的软件,这时候会进行大量的优化,增加编译时间但是提高运行效率。可以直接运行编译后的可执行文件,也可以使用cargo run -- release来运行
Cargo进行项目管理,主要是利用Cargo.lock和Cargo.toml两个文件。
- Cargo.toml是cargo特有的项目数据描述文件,存储了项目所有的元配置信息。
三、数据类型
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;
}
}