跟我一起学rust-变量与可变性
不可变变量
默认情况下变量是不可变的
变量如果二次赋值,则会无法编译。
let x = 5;
x = 6; // error
shadowing
- 在rust中可以使用相同的名字声明新的变量,新的变量就会
shadow(隐藏)
之前声明的同名变量. - 在后续代码中,这个新的变量名就是代表新的变量.
- shadow 和把变量标记为 mut 是不一样的
- 如果不使用 let 关键字,那么重新给 非 mut 的变量赋值会导致编译错误.
- 使用 let 声明新的同名变量,他的类型可以和之前不同.
fn shadowing(){
let x =5;
println!("x={}",x);
let x =x/2;
println!("x={}",x);
// 和之前类型不同
let x = "rust yyds";
println!("x={}",x);
}
可变变量
如果需要多次改变变量的值,则需要mut
关键字
let mut x = 5;
x = 6; // ok
常量
常量使用 const
关键字
const MAX_POINTS:u32 = 100_000;
和不可变变量之间的区别
常量和不可变变量类似,在绑定值后也是不可变的,但是他和不可变变量又有区别
- 不可以使用
mut
关键字,常量永远不可变的 - 声明常量需要使用
const
关键字,他的类型必须被标注 - 常量可以在任何作用域内进行声明,包括全局作用域。
- 常量只可以绑定到常量表达式,无法绑定到函数的调用结果或者需要在运行时计算出的值.
- 在程序运行期间,常量在其声明的作用域内一直有效
- 常量的值在编译时就确定了,不可变变量的值可以在运行时确定
命名规范
所有字母大写,每个单词之间用下划线分开
// 常量使用关键字为`const`
const HOUR:i32 = 60*60;
println!("hour={}",HOUR);