学习rust第一天--安装rust、学习rust数据结构

132 阅读6分钟

安装

一、在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开始的。