在本文中,我们将了解以下内容:
- 变量和可变性
- 影子
- 常量
变量和可变性
让我们从理解变量和可变性开始。
让我们声明一个变量并打印它:
fn main() { |
在这里,我们使用字符串插值来打印 x 的值。大括号是 x 值的占位符。然后 x 的值作为参数传递给 println!()。
类型的隐式声明:
- 在编译时,Rust 推断 x 的类型为 i32。这是因为我们将值 3 分配给 x,并且除非另有指定,否则整数文字默认为 i32。
在 Rust 中,变量默认是不可变的。这意味着一旦我们为变量分配了值,就无法更改它。如果我们尝试更改变量的值,则会出现错误
fn main() { |
mut 关键字
如果我们想改变一个变量的值,我们必须将它声明为可变的。我们通过mut在变量名称之前添加关键字来实现此目的,如下所示:
fn main() { |
现在我们可以更改 x 的值而不会出现错误。
Shadow遮蔽
现在,让我们看看shadow遮蔽的概念。
我们可以通过shadowing遮蔽不可变变量的值来改变它。shadowing遮蔽是指我们声明一个与前一个变量同名的新变量。新变量遮蔽隐藏了前一个变量,我们可以为新变量分配新值,而旧变量保持不变。
fn main() { |
你可能会认为我们会在这里出错,但事实并非如此。这是因为我们是在声明一个新变量,而不是改变旧变量的值。旧变量仍然存在,但新变量会对其产生影响。我们不能再使用旧变量,但可以使用新变量。
甚至可以使用前一个变量的值来初始化新变量:
fn main() { |
不同作用域中的名称遮蔽
名称遮蔽Name shadowing是指我们声明一个与前一个变量同名的新变量。新变量会对前一个变量产生遮蔽,我们可以给新变量赋一个新值,而旧变量保持不变。
fn main() { |
以上可正常运行
更改类型
使用遮蔽时,可以更改变量的类型。这是因为你是在声明一个新变量,而不是改变旧变量的值。
你可以用它来改变变量的类型:
fn main() { |
但如果对可变量不实现遮蔽处理,就无法更改变量的类型:
fn main() { |
以上编译会错误
这意味着:
- 如果我们使用遮蔽,就可以更改类型,
- 但如果变量是可变的,我们就不能在不使用遮蔽的情况下更改类型。
常量示例
常量是不可变且具有固定值的变量。
它们是使用const` 关键字声明的。它们必须用类型进行注释,并且只能设置为常量表达式,而不是函数调用的结果或只能在运行时计算的任何其他值。
fn main() { |
回顾一下常量:
- 您必须声明值的类型
- 您必须为声明中的常量赋值
- 你不能重新定义或改变常量(遮蔽shadow不起作用,不能使用mut关键字,不能重新分配)