Rust的设计中要区分不可变变量和常量是因为:不可变变量:初始化之后不会再变。“从现在开始,它不会再变了”,但初始化本身可以依赖变量,可能多次调用它所在的函数可能就得到不同的值。
一、不可变变量
不可变变量:初始化之后不会再变。“从现在开始,它不会再变了”
但初始化本身可以依赖变量,可能多次调用它所在的函数可能就得到不同的值。
比如let y = x + 1
之后所有 y
都可以用x + 1
代替,你可以知道y - 1
一定是x
,但不知道它确切是多少,可能是运行时相关的。
二、常量
常量:初始化过程完全静态(编译期已知),且也不会变。“这始终就是一个确定【静态】值”
比如const x: i32 = 1
之后,和x
相关的计算全都可以静态确定,进而有更多信息可以优化。
示例:
fn main(){
let mut x = 2;
let a = x + 1;
println!("a = {}",a);
x = 20;
println!("a = {}",a)
}
延伸阅读
常量与不可变变量的区别
- 常量需要使用const关键字来声明而不是let关键字,并且在声明常量时必须显式的指定其数据类型。
- 常量可以被声明在任何作用域中,甚至包括全局作用域。
- 常量只能被赋值为常量表达式或数学表达式,不能是函数返回值,或是其他在运行时才能确定的值。
隐藏
隐藏(shadow)是指在同一块代码块中声明一个与之前已声明变量同名的新变量,新变量会隐藏之前的变量,即无法再去访问前一个同名的变量,这种就称之为隐藏。
隐藏和mut的区别
- 隐藏机制不同于将一个变量声明为mut,因为如果不是在使用let关键字的情况下重新为变量赋值,则会导致编译错误。
- 重复使用let关键字会创建出新变量,所以我们可以在复用变量名称的同时改变它的类型。
文章标题:Rust的设计中为什么要区分不可变变量和常量,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/47171