1.变量绑定中的模式匹配
比如说下面这样的就叫做模式匹配,但是也有一些需要注意的地方,比如说下面列举的:
let (a, b) = (1, 2);
let c :i32= 9;
let (a1, b1) = (1, a1+2);//error:can not find a1 in this scope
let (a2, b2) = (c, c+9);//it's okay
2.可变性
rust中的绑定默认是不可变的。不可变的绑定绑定了之后就不能再将它们的绑定关系给解除。
let a:i32 = 5;
a = 10;//error:re-assignment of immutable variable 'a'
3.rust中不能够使用一个未经过初始化的变量
let a:i32;
println!("{}", a);//use of possibly uninitialized variable: `a`
通过上面代码运行之后输出的错误结果来看,我们可以看出在rust中他是不会为一个变量进行默认初始化工作的?否则下面的代码就应该出错了对吧:
let a:i32 ;
a = 9;
println!("{}", a);
4.作用域和隐藏
我们使用{}来表示一个代码块,在同一个{}中的变量位于同一个作用域之中。但是问题是为什么我们在上面提到的关于变量绑定中的模式匹配会出现不在同一个作用域的错误?关于变量隐藏的问题,在子作用域中定义的变量可以隐藏位于外层作用域中的同名变量,在同一个作用域中后定义的同名变量可以隐藏位于该作用域的先前定义的变量。但是,要注意这里关于变量隐藏和变量可变性之间的障眼法。他们是两个不同的概念,变量可变性不涉及新的变量,而变量隐藏一定是定义了一个新的变量,只不过是同名变量而已。
let a:i32 = 9;
{
let a:i32 = 8;
println!("{}",a);//8
}
let a:i32 = 0;
println!("{}", a);//0
网友评论