this is called a ‘variable’, but Rust’s variable bindings have a few tricks up their sleeves.
美其名曰,bind,不知道这个设计的背后是什么情况,2点搞不明白
1,用let这个关键字,真是很特别哦,为什么不用var,知乎上有说,是因为let是函数式编程里绑定的常用关键字,rust设计的时候,为什么不尽量采用类c的语法,弄个let,
2,究竟是变量用的多,还是不可变的量用的多,为什么不用let绑定变量,let nmut,绑定不可变的量?
因为Rust中很重要的一个概念是“模式解构” pattern destructure. 其中let/match 等语句都能引入模式解构。mut 关键字是模式的一部分,而不能将"let mut"视为一个组合。
let (mut x, y) = (1, 2); // 这是一个模式解构,x是mut绑定,y是不可变绑定。x绑定到了一个tuple的第一个元素
let (ref x, y) = (1, 2); // 这也是一个模式解构
更复杂的例子:
fn main() {
let mut o : Option<i32> = Some(1); // o 是变量绑定,看起来与普通变量声明没什么区别
match o {
Some(ref mut x) => *x = 2, // 这里x也是变量绑定,它是个指针,绑定到了Option内部数据
None => (),
};
println!("{:?}", o);
}
1.为什么用let而不用var,相当于说,我喜欢苹果,为什么你喜欢香蕉。
2.官方文档有说明。默认变量不可变更安全。
let很特别吗,js都有好吧,看ES6
变量默认不可变,可以让你的程序少很多Bug