安装
一、在linux或者macos上安装rustup
安装命令:
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
验证安装:
rustc --version
更新rust:
rustup update
卸载rust:
rustup self uninstall
通过命令打开rust文档:
rustup doc
二、运行第一个rust程序(hello World)
新建一个文件,修改文件名为hello.rs,输入如下内容:
fn main() {
println!("Hello, world!");
}
在命令行找到该文件的存放目录,使用命令:
rustc hello.rs
会生成一个可执行文件,执行可执行文件./hello,即可在控制台看到输出:Hello, world!
三、使用rust包管理器Cargo
Cargo可以帮助你构建系统以及管理依赖包,可以通过以下命令来使用Cargo:
查看版本
cargo --version
创建项目
cargo new 项目名
构建项目
cargo build
运行项目
cargo run
检查项目是否有编译错误
cargo check
1、使用cargo创建项目
例如:
cargo new hello
cd hello
在项目中会生成一个src目录以及一个Cargo.toml文件,Cargo.toml文件中包含内容如下:
[package]
name = "hello"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
会展示出项目的包信息以及使用依赖的信息。
2、使用cargo运行项目
使用cargo有两种运行项目的方法。
第一种:使用cargo build构建出一个可执行文件,该可执行文件的位置在./target/debug/目录下,可以使用./target/debug/hello来执行该项目。
第二种:直接使用cargo run来运行该项目,cargo run本质上相当于一个脚本,将cargo build以及运行可执行文件的步骤结合。
3、使用cargo检查项目
如果你使用cargo新建一个项目,你可以使用命令来查看项目代码编译是否可以有错误:
cargo check
该命令不会生成可执行文件,只会检查编译是否有误。
rust中的变量、常量
一、变量
rust中的变量分为可变变量以及不可变变量。
1、不可变变量
不可变变量是当该变量初始化完成后,即被绑定上一个值后,就不可被改变。
定义一个不可变变量:
let max = 10;
这里的max不可以被修改或者对该变量第二次赋值,当变量在程序中被修改时,程序会产生编译错误。
例如:
let max = 10;
printf!("this is {max}");
max = 11;
printf!("this is {max}");
上述代码就会产生编译错误。
2、可变变量
定义一个可变变量:
let mut max = 10;
rust中使用mut来定义一个可变变量。
可变变量是可以对变量进行修改的,例如:
let max = 10;
printf!("this is {max}");
max = 11;
printf!("this is {max}");
该程序则会打印:
this is 10
this is 11
3、隐藏
rust中提供了隐藏机制,可以使定义过的变量,再次定义来表示不同含义的变量。
例子1:
let max = 10;
let max = max + 1;
{
let max = "hello";
pritln!("this is {max}");
}
println!("this is {max}");
输出如下:
this is hello
this is 11
提示:隐藏机制虽然可以重新定义变量,但是重新定义的变量只在该变量的作用域下生效。
例子2:
let max = 10;
let max = "hello";
println!("max is {max}");
输出:
max is hello
提示:可以使用隐藏机制来改变变量的数据类型。
例子3:
let mut max = 10;
max = "hello";
println!("max is {max}");
输出:
error[E0308]: mismatched types
--> src/main.rs:3:11
|
2 | let mut max = 10;
| -- expected due to this value
3 | max = "hello";
| ^^^^^^^ expected integer, found `&str`
For more information about this error, try `rustc --explain E0308`.
提示:隐藏机制不能修改可变变量的数据类型。
rust中的数据类型
rust中的数据类型分为标量以及复合
一、标量
rust中标量是一个单独的值,rust中有四种标量类型:整型、浮点型、布尔型、字符型。
1、整型
在了解整型前,先知道每个变体都是分为有符号或者无符号的,并且有一个明确的大小,有符号代表和无符号表示是否可以为负数。 rust中的整型: ![[Pasted image 20230817153230.png]] 拿长度为8-bit的类型举例,有符号的类型i8的变体可以存储从-(2^(n-1)) 到 (2^(n-1))-1大小的数字,可以存储-2^7到(2^7)-1内的数字,也就是-128到127;而无符号的类型u8只能存储0到(2^n)- 1大小的数字,也就是只能存储0到255内的数字。 提示:有符号数通常以补码形式存储。rust中整型默认为u32。
2、浮点型
rust中的浮点型通常指带小数点的数字,rust的浮点类型只分为两种,f32和f64,分别占32位和64位,rust中的浮点型默认为f64,因为在现代cpu中,f64与f32速度几乎一样,但是f64精度更高。 提示:f32是单精度浮点数,f64是双精度浮点数。 例子:
let x = 2.0; //f64 默认
let y: f32 = 3.8; //f32
3、布尔型
rust中的布尔型和其他语言一样使用true和false表示。 例子:
let a = true;
let b: bool = false;
4、字符型
rust中字符型可以表示一些字母元素,使用char关键字来声名。 例子:
let s = 'a';
let b = 'A';
二、复合类型
复合类型是指将多个值组合成一个类型,rust中的复合类型有两种:元组(tuple)和数组(array)。
1、元组
元组可以包含不同类型的数值,但是元组的长度是固定的,一旦声名了长度就不会该变。 例子:
// 元组的定义
let tup: (u32,f64,u8)=(500,6.4,1);
为了从元祖中获取某个单独的值,我们可以使用模式匹配来解构元组值:
fn main() {
let tup = (500, 6.4, 1);
let (x, y, z) = tup;
println!("The value of y is: {y}");
}
我们使用了一个模式(x, y, z)来解构该元组,将tup元组拆成了三个部分,其中打印的y的值就是6.4
还可以直接使用点号.来访问:
fn main() {
let tup = (500, 6.4, 1);
let x = tup.0
let y = tup.1
println!("The value of x is: {x}");
}
元组的起始数据单元是0
提示:元组中的每一个元素数据类型可以不同。
2、数组类型
与元组不同,数组的每一个元素数据类型都是相同的,而且数组的长度是固定的。 数组定义:
let a = [1,2,3,4,5,6];
let b: i32 = [1,2,3,4,5]; // 定义一个数组,数组类型是i32.
let c = [3;5]; // 定义一个数组,长度为5,每个元素都是3。
访问数组元素:
let a = [1,2,3,4,5];
let one = a[0];
let two = a[1];
数组的索引也是从0开始的。