[][src]Function tao_of_rust::ch04::resource_management::binding_and_func

pub fn binding_and_func()

资源管理:

Base usage: 变量与函数 变量默认存储在栈中

fn main() {
    let x: i32;   // Rust会检查未初始化的变量,并报错
    println!("{}", x);
}Run

Base usage: if 分支检查

fn main() {
    let x: i32;
    if true {
        x = 1;
    } else {    // 如果去掉else,则编译器会报错
        x = 2;
    }
    println!("{}", x); // 如果去掉此行,再去掉else则不会报错,因为没有使用到x的地方,就算未初始化也没有关系
}Run

Base usage: break会将分支中的变量返回

fn main() {
    let x: i32;
    loop {
        if true {
            x = 2;
            break;
        }
    }
    println!("{}", x); // 因为break会返回分支中的变量,所以该行可以正确打印2
}Run

Base usage: 初始化数组

fn main() {
    let a: Vec<i32> = vec![]; // 必须指定类型,因为无法做类型推断
    let b: [i32; 0] = [];
}Run

Base usage: 当将一个已初始化变量y绑定给另外一个变量y2时,Rust会把变量y看作是逻辑上的未初始化变量

fn main() {
    let x = 42;
    let y = Box::new(5);
    println!("{:p}", y); // 0x7f5ff041f008
    let x2 = x;
    let y2 = y;
    // println!("{:p}", y); // y实际上已经变成了未初始化变量
}Run