Rust: 变量

变量的概念来源于数学,在计算机语言中,它是数据存取的基本单位。

在 Rust 中,变量有很多不同于其他语言的地方,今天就来简单介绍一下。

变量声明

直接看下面代码:

fn main() {
    // 使用let关键字声明一个变量
    let a = 1;
    
    // 也可以附带类型信息
    let b: i32 = 3;
    
    println!("{} {}", a, b);
}

Rust 使用 let 关键字来声明变量,乍一看,很像是动态语言,其实 Rust 是一门强类型语言,只不过编译器会根据变量的初始值推导出类型的。

当然,我们也可以明确地为变量指定它的类型,只需要在变量名后面,加上冒号和类型名即可。

上面代码中,变量 b 的类型是 i32,即 32 位有符号整数(32-bit signed integer),关于数据类型,我们后续会介绍到,这里简单了解就行了。

需要注意的是,如果声明一个变量时,没有为其指定初始值,那就必须带上类型信息:

fn main() {
    // 无初始值时 必须附带类型信息
    let a: i32;

    a = 1;

    println!("{}", a);
}

可变性

使用 let 声明的变量,默认是不可变的(immutable),初学 Rust 的朋友,可能在不经意间就踩了坑:

fn main() {
    let a = 1;
    
    println!("{}", a);
    
    // 编译器报错:不能二次赋值
    a = 3;
    
    println!("{}", a);
}

如果想在后续的代码中,对指定的变量进行更改,我们需要在声明时,为这个变量加上一个 mut 的限定词,表示这个变量是可变的(mutable),即可被更改的:

fn main() {
    // 需要加上mut关键字
    // 表示该变量是mutable的
    let mut a = 1;
    
    println!("{}", a);
    
    // 成功被赋值
    a = 3;
    
    println!("{}", a);
}

不过,可不要忘了,Rust 是强类型语言,它仍然会检查赋值的类型:

fn main() {
    let mut a = 1;
    
    // 编译报错 类型不符
    a = "HelloWorld";
    
    println!("{}", a);
}

变量遮盖

与其他编程语言不太一样的是,Rust 允许在当前作用域重复声明多个同名变量,后面声明的变量,会遮盖前面声明的同名变量:

fn main() {
    let a = 1;
    
    println!("{}", a);
    
    // 重新声明一个同名变量
    let a = a * 3;
    
    println!("{}", a);

    // 允许不同类型
    let a = "HelloWorld";
    
    println!("{}", a);
}

常量

虽然使用 let 声明的变量,默认是不可更改的,但不适合作为常量使用,编译器会强制 let 变量使用 snake case 的命名风格,即 my_friend 全小写的方式,并且它不能在全局作用域声明。

在 Rust 中,声明一个常量需要使用 const 关键字:

// 全局常量
const MAX_COUNT: i32 = 100;

fn main() {
    println!("{}", MAX_COUNT);
}

需要注意的是,常量必须采用全大写方式,也必须附带类型信息,最后,必须给定初始值。

变量这一部分,就先介绍到这里了。

posted @ 2019-11-15 19:06  liuhe688  阅读(244)  评论(0编辑  收藏  举报