跟我一起学rust-变量与可变性

后端 / 笔记 / 2021-11-09

跟我一起学rust-变量与可变性

不可变变量

默认情况下变量是不可变的
变量如果二次赋值,则会无法编译。

let x = 5;
x = 6; // error

shadowing

  • 在rust中可以使用相同的名字声明新的变量,新的变量就会shadow(隐藏)之前声明的同名变量.
  • 在后续代码中,这个新的变量名就是代表新的变量.
  • shadow 和把变量标记为 mut 是不一样的
    • 如果不使用 let 关键字,那么重新给 非 mut 的变量赋值会导致编译错误.
    • 使用 let 声明新的同名变量,他的类型可以和之前不同.
fn shadowing(){
    let x =5;
    println!("x={}",x);
    let x =x/2;
    println!("x={}",x);

    // 和之前类型不同
    let x = "rust yyds";
    println!("x={}",x);
}

可变变量

如果需要多次改变变量的值,则需要mut关键字

let mut x = 5;
x = 6; // ok

常量

常量使用 const关键字

const MAX_POINTS:u32 = 100_000;

和不可变变量之间的区别

常量和不可变变量类似,在绑定值后也是不可变的,但是他和不可变变量又有区别

  • 不可以使用 mut 关键字,常量永远不可变的
  • 声明常量需要使用 const 关键字,他的类型必须被标注
  • 常量可以在任何作用域内进行声明,包括全局作用域。
  • 常量只可以绑定到常量表达式,无法绑定到函数的调用结果或者需要在运行时计算出的值.
  • 在程序运行期间,常量在其声明的作用域内一直有效
  • 常量的值在编译时就确定了,不可变变量的值可以在运行时确定

命名规范

所有字母大写,每个单词之间用下划线分开

// 常量使用关键字为`const`
const HOUR:i32 = 60*60;
println!("hour={}",HOUR);