变量、常量和标量数据类型
常量
直接常量(字面常量)
rust
100, "hello"
const常量
rust
const PI: f64 = 3.1415926;
变量
关键字
rust
let
mut
const
ref
crate
mod
trait
struct
dyn
extern
enum
self
变量命令规则
参考Java 的变量命名规则
变量的定义
rust
let variable_name: type = value;
变量的可变性
每个变量都是不可变的,除非使用mut关键字
rust
let x = 5;
x = 6; // error
rust
let mut x = 5;
x = 6;
变量的遮蔽
Rust允许重新定义一个变量(内存对象的再分配和mut不同)
rust
let x = 5;
let x = x + 1;
println!("The value of x is: {}", x);
rust
fn print_type_of<T>(_: &T) {
println!("type is {}", std::any::type_name::<T>())
}
fn main() {
let x = String::from("123");
print_type_of(&x);
println!("{}", x);
let x = match x.trim().parse::<i32>() {
Ok(num) => num,
Err(_) => panic!("not a number"),
};
print_type_of(&x);
println!("The value of x is: {}", x);
}
字符串变量
Rust内置的字符串类型是&str,他是Rust的核心内置类型,和标准库的String类型不同,&str是只读的,不能修改。
rust
let company: &str = "hello";
println!("{}", company);
数据类型的定义
基本数据类型:
标量(Scalar)类型:
- 整数类型:u8, u16, u32, u64, u128, usize
- 浮点数类型:f32, f64
- 布尔类型:bool
- 字符类型:char
符合(Compound)类型:
- 元组(Tuple)
- 数组(Array)
- 结构体(Struct)
- 枚举(Enum)
常数的数据类型
rust
let a = 33u16;
let b: i32 = 0b11_01_00_10; // 二进制
let c: i32 = 0o567i64; // 八进制
let d: i32 = 0xfffu32; // 十六进制
作用域
任何一个可以用来包含代码的花括号({ })就是一个作用域。
变量调出作用域失效时,会自动调用Drop trait的drop方法来释放内存。
字符串字面量是存放在全局静态内存中的,所以不会被释放。
所有权
所有权的机制是为了让 Rust在编译阶段更有效的分析内存资源的有用性 以实现内存管理而诞生的概念。
它是Rust语言为了高效地使用内存而设计的语法机制
类似Java的Python的