rust里mut 和遮蔽之间的区别

mut遮蔽之间的一个区别是,因为我们在再次使用 let 关键字时有效地创建了一个新的变量,所以我们可以改变值的类型,但重复使用相同的名称。例如,假设我们程序要求用户输入空格字符来显示他们想要的空格数目,但我们实际上想要将该输入存储为一个数字:

rust 复制代码
let spaces = "   ";
let spaces = spaces.len();

第一个 spaces 变量是一个字符串类型,第二个 spaces 变量是一个数字类型。所以变量遮蔽可以让我们不必给出不同的名称,如 spaces_str 和 spaces_num,相反我们可以重复使用更简单的 spaces 变量名。然而,如果我们对此尝试使用 mut,如下所示,我们将得到一个编译期错误:

rust 复制代码
//This code does not compile!
let mut spaces = "   ";
spaces = spaces.len();

该错误表明我们不允许更改变量的类型:

bash 复制代码
$ cargo run
   Compiling variables v0.1.0 (file:///projects/variables)
error[E0308]: mismatched types
 --> src/main.rs:3:14
  |
2 |     let mut spaces = "   ";
  |                      ----- expected due to this value
3 |     spaces = spaces.len();
  |              ^^^^^^^^^^^^ expected `&str`, found `usize`

For more information about this error, try `rustc --explain E0308`.
error: could not compile `variables` due to previous error
相关推荐
代钦塔拉4 小时前
Qt4 vs Qt5 带参数信号槽的连接方式详解
开发语言·数据库·qt
InfinteJustice6 小时前
踩坑分享C 语言文件操作全攻略:从基础读写到随机访问与缓冲区原理
c语言·开发语言·microsoft
码云数智-大飞6 小时前
滥用Lombok的@EqualsAndHashCode导致线上事故复盘
开发语言
yong99906 小时前
C# 实时查看硬件使用率(CPU 内存 硬盘 网络)
开发语言·网络·c#
不午休の野猫7 小时前
vs + qt环境编译.sln项目时报无法解析的外部符号metaObject && qt_metacast
开发语言·qt
吴声子夜歌7 小时前
Java——接口的细节
java·开发语言·算法
阿拉金alakin7 小时前
深入理解 Java 锁机制:CAS 原理、synchronized 优化与主流锁策略全总结
java·开发语言
myheartgo-on7 小时前
Java—方 法
java·开发语言·算法·青少年编程
雨落在了我的手上7 小时前
如何学习java?
java·开发语言·学习
神仙别闹8 小时前
基于 C# OpenPGP 的文件管理系统
开发语言·c#