前端搞Rust(2) 变量

202 阅读2分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。

变量声明和可变性(跟js不同)

  • 声明变量使用let关键字
  • 默认情况下变量是不可变的 - 第一次赋值以后,就不能再赋值
  • 声明变量时,在变量前添加mut,可以使变量可变
fn main() {
   let x = 5; 
   println!("value is {}", x)  //直接输出value is 5,不会有任何报错
}

再给x 再赋值一次

fn main() {
    let x = 5;
    x = 10;
    println!("value is {}", x)
}

image.png 不能给不可变的变量赋值两次,跟常见的语言很不一样,需要在前面添加关键字mut

fn main() {
    let mut x = 5;
    x = 10;
    println!("value is {}", x)
}

变量于常量

  • 声明常量使用const 关键字,类型必须标注, 变量在编辑器能推倒出的情况下可以不标注,类似上面的代码
  • 不可使用mut,常量永远不可变化
  • 常量在任何作用域声明(包含全局作用域)
  • 只可以绑定常量表达式
  • 在其声明的作用域内一直有效
  • 规范 单词大写,_分割.例如 const MAX_SIZE:u32 = 10000;其实小写也能编译过去只是不推荐
const MAX_SIZE: i32 = 100; 全局作用域
fn main() {
    println!("{}", MAX_SIZE)
}

shadowing(跟js 很不一样)

  • 可使用相同的名字声明新的变量,新的变量就会shadow之前的的同名的变量 shadow相当于隐藏,屏蔽

rust例子

fn main() {
    let x = 10;
    let x = 11;
    println!("{}", x) //输出11
}
```js
let x =1
let x =2 // SyntaxError: Identifier 'x' has already been declared,重复声明
console.log(x)

跟let mut声明变量的不同点

  • 不使用mut 关键字,重新给变量赋值会报错
  • 使用let 声明的新变量,也是不可变的
  • let 声明的同名新变量,他的类型可以与之前不一样
fn main() {
    let mut x = 10; // 编译器推到类型为i32,
    let x = "hello".to_string(); //编译器推到类型为String
    println!("{}", x)
}