变量和常量
Rust是强类型语言,但具有自动判断变量类型的能力
变量分为以下两种:
不可变变量
可变变量
不可变变量
let a = 123; //声明变量需使用let关键字 //在这句声明语句之后,以下三行代码都是被禁止的: a = "abc"; //错误, 当声明a是123以后,a就被确定为整型数字,不能把字符串类型的值赋给它 a = 4.56; //错误, 自动转换数字精度有损失,Rust 语言不允许精度有损失的自动数据类型转换 a = 456; //错误, a是不可变变量, 不可以改变a的值
变量的值可以"重新绑定", 但在"重新绑定"以前不能私自被改变, 这样可以确保在每一次"绑定"之后的区域里编译器可以充分的推理程序逻辑
let b = 567; //声明变量b, 绑定为567, 后续代码中看到b,它的值就一定是567,除非重新绑定,因为绑定后它的值是不可变的 b = 123; //不合法, 因为已经绑定了567,若要改变值,只有重新绑定 let b = 123; //合法,变量b被重新绑定,值为123
虽然Rust有自动判断类型的功能, 但有些情况下最好声明类型
let a: u64 = 123; //这里声明了a为无符号64位整型变量, 如果没有声明类型, a将自动被判断为有符号32位整型变量, 这对于a的取值范围有很大的影响
不可变变量的意义
它是Rust为高并发安全而做的设计,即在语言层面尽量少的让变量的值可以改变
不可变变量的值不可改变, 并不意味着它不是变量,官方称为"不可变变量"
如果一个变量的值在程序的其中一部分中永远不会改变的情况下运行
而代码的另一部分在改变该值,那么代码的第一部分可能就不会按照设计的意图去运转
这样造成的错误很难在事后找到, 这是Rust语言设计这种机制的原因
可变变量
let mut a = 123; //视同关键字mut声明可变变量("可变",mutable) a = 456; //合法,a为可变变量
常量
const a:i32 = 123; //使用const关键字声明常量
常量和变量的区别
变量中的可变变量可以随时改变值,变量中的不可变变量也可以通过重新绑定修改变值,而常量声明后就干脆不可以改变值
let a = 123; //变量a绑定为123 let a = 456; //合法, 变量a重新绑定为456 const b: i32 = 123; //常量b为123 let b = 456; //不合法,常量b不能被重新绑定
重影
重影就是指变量的名称可以被重新使用的机制
重影与可变变量的区别:
重影是指用同一个变量重新代表另一个变量实体, 其类型、可变属性和值都可以变化
可变变量赋值仅能发生值的变化
//重影 fn main() { let x = 5; let x = x + 1; let x = x * 2; println!("The value of x is: {}", x); //结果:The value of x is: 12 } //可变变量 let mut s = "123"; s = s.len(); //不合法, 不能给字符串变量赋整型值