变量与常量

变量

在 Rust 中,变量用关键字 let 声明。 每个变量都有一个唯一的名称。 声明变量后,可将其绑定到某个值,也可稍后在程序中绑定该值。

不可变与可变

在 Rust 中,变量绑定默认不可变。 如果变量不可变,在将值绑定到名称后,将无法更改此值。

fn main() {
    let x = 5; // 不可变变量
    println!("{}", x);
    let mut y:i32 = 6; // 可变变量
    y = y + 1; 
    println!("{}", y);
}

Shadowing

在Rust中可以使用相同的名字声明新的变量( 类型也可以是新的 ),新的变量就会shadow(隐藏)之前声明的同名变量。

fn main() {
    let x = 5;
    println!("x is {}", x);
    let mut x: f32 = 8.88;
    x += 2.2;
    println!("x is {}", x);
}

常量

常量(constant),常量在绑定值以后也是不可变的,与变量的区别 :

不可以使用mut,常量永远都是不可变的;

声明常量使用const关键字,它的类型必须被标注;

常量可以在任何作用域内进行声明,包括全局作用域;

常量只可以绑定到常量表达式,无法绑定到函数的调用结果或只能在运行时才能计算出的值;

在程序运行期间,常量在其声明的作用域内一直有效;

命名规范:Rust里常量使用全大写字母,每个单词之间用下划线分开;

fn main() {
    const PI:f64 = 3.14159265358979323846;
    println!("PI is {}",PI);
}

使用下划线开头忽略未使用的变量

如果你创建了一个变量却不在任何地方使用它,Rust 通常会给你一个警告,因为这可能会是个 BUG。但是有时创建一个不会被使用的变量是有用的,比如你正在设计原型或刚刚开始一个项目。这时你希望告诉 Rust 不要警告未使用的变量,为此可以用下划线作为变量名的开头:

fn main() {
    let _x = 5;
    let y = 10;
}

运行 :

warning: unused variable: `y`
 --> src/main.rs:3:9
  |
3 |     let y = 10;
  |         ^ help: if this is intentional, prefix it with an underscore: `_y`
  |
  = note: `#[warn(unused_variables)]` on by default

warning: `hai-test` (bin "hai-test") generated 1 warning
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.21s
     Running `target\debug\hai-test.exe`

两个变量都是只有声明,没有使用,但是编译器却只给出了 y 未被使用的警告。

值得注意的是,这里编译器还很善意的给出了提示(Rust 的编译器非常强大,这里的提示只是小意思):将 y 修改 _y 即可。