RUST基础:变量遮蔽
Rust基础入门书籍推荐《深入浅出RUST》
Rust 是允许在同一个代码块中声明同样名字的变量。如果这样做,后面声明的变量会将前面声明的变量“遮蔽(Shadowing)”起来。如:
1 fn main() { 2 let x = "hello"; 3 println!("x is {}",x); 4 5 let x = 5; 6 println!("new x is {} ",x) 7 }
输出结果为:
我们可以看到上面的程序是可以编译通过并顺利打印出结果的。请注意第5行的代码,它不是x=5;,他前面有一个let关键字。如果没有let这个关键字。这条语句就是对x的重新绑定(重新赋值)。而有了这个let关键字,就是又声明一个新的变量,只是它的名字恰巧与前面的一个变量相同而已。
没有let关键字的声明x的情况下:
会报如此的错误
虽然两个变量名都是x,但是它们内存空间完全不同,类型也完全不同,因为它们实际上是两个不同的变量。从第5行开始,一直到这个代码块结束,我们没有任何办法再去访问前一个x变量,因为它的名字已经被遮蔽了。
变量遮蔽在某些情况下是非常有用的,比如,我们需要在同一个函数内部把一个变量转换为另一个变量类型,但又不想给它们起不同的名字,再比如,在同一个函数内部,需要修改一个变量绑定的可变性。例如,我们对一个可变数组执行初始化,希望此时它是可读写的,但是初始化完成后,我们希望它只是只读的。可以这样做:
1 fn main() { 2 let mut v = Vec::new(); //v 必须是mut修饰,因为我们需要对它写入数据 3 v.push(1); 4 v.push(2); 5 v.push(3); 6 7 let v = v; //从这里往下,v变成了只读变量,可读写变量v已经被遮蔽,无法在访问 8 for i in &v{ 9 println!("{}",i) 10 } 11 12 }
同理,反过来,如果一个变量是不可变的,我们也可以通过变量遮蔽创建一个新的、可变的同名变量:
1 fn main() { 2 let v = Vec::new(); 3 let mut v = v; 4 v.push(1); 5 println!("{:?}",v) 6 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类