【rust】Rust变量绑定(3)
Rust 是一个静态类型语言,这意味着我们需要先确定我们需要的类型。
什么是变量绑定?
将一些值绑定到一个名字上,这样可以在之后使用他们。
如何声明一个绑定?
使用 let 关键字:
fn main() { let x = 1; }
关于类型:Rust有一个叫做类型推断的功能。如果它能确认这是什么类型,Rust 不需要你明确地指出来。
如何指定类型?
类型写在一个冒号( : )后面:
let x: i32 = 5;
类型都有哪些?(后面会进行链接)
绑定值如何修改?
绑定默认是不可变的,也就是不能被修改。例如下面的(错误)做法:
let x = 5; x = 10;
如果想要使变量绑定可变,使用 mut :
let mut x = 5; // mut x: i32 x = 10;
不止一个理由使得绑定默认不可变的,不过我们可以通过一个 Rust 的主要目标来理解它:安全。如果你没有使用 mut ,编译器会捕获它,让你知道你改变了一个你可能并不打算让它改变的值。如果绑定默认是可变的,编译器将不可能告诉你这
些。如果你确实想变量可变,解决办法也非常简单:加个 mut 。
关于变量作用域
变量绑定有一个作用域 - 他们被限制只能在他们被定义的块中存在。一个块是一个被 { 和 } 包围的语句集合。
fn main() { let x: i32 = 17; { let y: i32 = 3; println!("The value of x is {} and value of y is {}", x, y); } println!("The value of x is {} and value of y is {}", x, y); // This won't work. } 我们定义了两个变量绑定, x 和 y ,他们位于不同的作用域中。 x 可以在 fn main() {} 块中被访问,而 y 只能在内部块内访问。第一个 println! 将会打印“The value of x is 17 and the value of y is 3”,不过这个并 不能编译成功,因为第二个 println! 并不能访问 y 的值,因为它已不在作用域中。
关于变量隐藏(重定义)
一个后声明的并位于同一作用域的相同名字的变量绑定将会覆盖前一个变量绑定,隐藏允许我们将一个名字重绑定为不同的类型。它也可以改变一个绑定的可变性。注意隐藏并不改变和销毁被绑定的值,这个值会在离开作用域之前继续存在,即
便无法通过任何手段访问到它。