Rust 基础
今天开始学rust
一、变量
1. let
不变的变量
let
是不可变的
let variable_name = value;
示例:
let x = 5;
println!("The value of x is: {}", x);
// x = 6; // 这行会引起编译错误,因为x是不可变的
2. let mut
会变得变量
mut
关键字来声明变量是可变的
let mut variable_name = value;
示例:
let mut y = 5;
println!("The value of y is: {}", y);
y = 10; // 正确,因为y是可变的
println!("The value of y is now: {}", y);
3. const
这次是真的常量
const
关键字用于声明一个常量常量类似于不可变变量,但有几个关键区别:
- 常量不仅不可变,而且必须在编译时就已知其值
- 常量可以在任何作用域内声明,包括全局作用域
- 常量遵循与静态生命周期一致的规则,即它们的值始终存在
示例:
const MAX_POINTS: u32 = 100_000;
// 一般const就像这样全大写
println!("The maximum points are: {}", MAX_POINTS);
二、Rust 中的数据类型
Rust 中的数据类型主要分为两大类
标量类型和复合类型
在创建变量时指定类型
let a = '2'; let b: char = '2';
这两一样的
const
必须声明类型
1. 标量类型
标量类型代表单一值Rust 有四种基本的标量类型:整数、浮点数、布尔值和字符
A. 整数类型:
- 有符号整数(
i8
,i16
,i32
,i64
,i128
,isize
)和无符号整数(u8
,u16
,u32
,u64
,u128
,usize
)
B. 浮点类型:
f32
:32 位浮点数f64
:64 位浮点数(默认)
C. 布尔类型:
bool
:它有两个可能的值:true
和false
D. 字符类型:
char
:表示单个 Unicode 标量值(比如一个字母或数字),存储为 4 个字节
字符串属于什么?
Answer:
在 Rust 中,字符串主要以两种形式出现:
String
和字符串切片&str
。
String
类型:
String
是一个可增长、可缩短、可变、拥有所有权的 UTF-8 编码字符串类型。- 它在堆上分配空间,因此可以存储在编译时未知大小的文本。
字符串切片
&str
类型:
&str
是一个不可变的字符串切片,通常以字符串字面量的形式出现。- 字符串切片是固定大小的,不能被增长或缩短。
示例:
let d = "Hello"; println!("{d} world!"); let e = String::from("hello"); println!("{e} world!");
这两种字符串类型之间的主要区别在于所有权。
String
是一个拥有所有权的类型,可以被修改和增长;而&str
是一个借用类型,通常用于借用字符串的一部分。
2. 复合类型
复合类型可以将多个值组合成一个类型Rust 有两个主要的复合类型:元组(tuple)和数组(array)
A. 元组类型:
- 长度固定
- 类型可以不同
let a = (1, 2, 3, 4);
// 创建一个元组
let (b, c, d, e) = a;
println!("{}{}{}{}", b, c, d, e);
// 解构元组
println!("{}", a.0);
// 下标访问元组元素
B. 数组类型:
- 类型相同
- 长度固定
- 数组在栈上分配,而不是在堆上
let x = [1,2,3];
// 创建一个数组
let [a,b,c] = x;
println!("{a}{b}{c}");
// 解构数组
println!("{}", x[1]);
// 下标访问数组元素
3. 类型转换
总结
字符串
to 其他
:
let b: bool = a.parse().expect("Not bool");
其他
to 字符串
:
let b: String = a.to_string();
其他
to 其他
:
let b = a as i32;