Rust的设计中为什么要区分不可变变量和常量

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关键字会创建出新变量,所以我们可以在复用变量名称的同时改变它的类型。

文章包含AI辅助创作:Rust的设计中为什么要区分不可变变量和常量,发布者:E.Z,转载请注明出处:https://worktile.com/kb/p/47171

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
E.Z的头像E.Z

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部