Skip to content

变量、常量和标量数据类型

常量

直接常量(字面常量)

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的

人生感悟