[Rust基础]变量与可变性

变量

默认情况下变量是不可变的immutable),虽然变量不可变听着有点奇怪,但这些特性可以让你充分利用 Rust 提供的安全性和简单并发性的方式来编写代码。不过你也可以选择让变量是可变的mutable)。
在以下代码中,由于尝试对不可变的变量 x 的值进行修改,在编译阶段产生类报错。

fn main() {
    let x = 5;
    println!("The value of x is: {}", x);
    x = 6;
    println!("The value of x is: {}", x);
}

编译运行该代码会得到以下报错:

error[E0384]: cannot assign twice to immutable variable `x`
 --> src/main.rs:4:5
  |
2 |     let x = 5;
  |         -
  |         |
  |         first assignment to `x`
  |         help: consider making this binding mutable: `mut x`
3 |     println!("The value of x is: {}", x);
4 |     x = 6;
  |     ^^^^^ cannot assign twice to immutable variable

如果要让代码可以编译,只需要将 let x = 5; 修改为 let mut x = 5;,即可通过编译。

常量(constant)

与不可变变量类似,常量constant)是绑定到一个常量名且不允许更改的值,但是常量和变量之间存在一些差异。

  • 首先,常量不允许使用 mut。常量不仅仅默认不可变,而且自始至终不可变。常量使用 const 关键字而不是 let 关键字来声明,并且值的类型必须注明。
  • 常量可以在任意作用域内声明,包括全局作用域,这对于代码中很多部分都需要知道一个值的情况特别有用。
  • 最后一个不同点是常量只能设置为常量表达式,而不能是函数调用的结果或是只能在运行时计算得到的值。

Rust 常量的命名约定是全部字母都使用大写,并使用下划线分隔单词。

遮蔽(shadow)

rust 中可以声明和前面变量具有相同名称的新变量。第一个变量将被第二个变量遮蔽shadow),这意味着当我们使用变量时我们看到的会是第二个变量的值。我们可以通过使用相同的变量名并重复使用 let 关键字来遮蔽变量,如下所示:

fn main() {
    let x = 5;

    let x = x + 1;

    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {}", x);
    }

    println!("The value of x is: {}", x);
}

在这个例子中,首先创建了一个不可变的变量 x 数值为 5,在该作用域下通过重复使用 let 声明变量来遮蔽了前一个 x,使新的 x 的值为 6。然后进入了内部作用域,再次通过第三个 let 来遮蔽外部的 x,得到内部的 x 值为 12。内部的遮蔽结束后最后的外部代码得到的 x 仍然是外部作用域中值为 6 的变量 x。
因此,程序运行的结果如下:

The value of x in the inner scope is: 12 
The value of x is: 6
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值