Rust 从入门到摔门而出门 (一) 变量声明和作用域

83 阅读2分钟

Rust 从入门到摔门而出门 (一) 变量声明作用域

学不可以已。青取之于蓝,而青于蓝。

一、变量声明

fn main() {
	// 声明变量 x = 5
    let x = 5;
 	// 修改变量x,此处会报错,变量默认是不可改变的。
    // x = 6;
    println!("The value of x is: {x}");

	// 声明可变变量, 在变量名前添加 mut 来使它变成可变变量。
	let mut y = 10;
	y = 11;
 	println!("The value of y is: {y}");
}

常量

声明常量,值不可被改变。使用 const 关键字声明,不允许使用 mut,必须注明数据值类型

fn main() { 
	// 声明 THREE_HOURS_IN_SECONDS 设置值限制  32比特位的 整数类型
    const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3
    println!("The value of THREE_HOURS_IN_SECONDS is: {THREE_HOURS_IN_SECONDS}");
}

隐藏

在rust 中可以变量名相同,后面的变量名会覆盖前面的变量名.

fn main() { 
	let x = 10;
	println!("1.输出 x:{x}"); // 10 
	let x = x + 1;
	{
		let x = x * 2; 
		println!("2.输出 x:{x}"); // 22 
	}
	println!("3.输出 x:{x}"); // 11 
}

let 重新赋值 和 使用 mut 有所不同。第一个y是字符串类型,但是 y.len() 是数字类型,所以会报错提示不能修改变量的数据类型。

fn main() { 

	let x = "123"; 
	println!("4.输出 x:{x}");  //123
  	let x = x.len();
	println!("5.输出 x:{x}");  // 3

  	let mut y = "123456";
  	y= y.len(); //error[E0308]: mismatched types expected `&str`, found `usize`
}

let 声明的作用域,

fn main() { 
	let mut x = 10;
	println!("1.输出 x:{x}"); // 10 
	{
		x = 2; 
		println!("2.输出 x:{x}"); // 2
	}
  	{
		let x = 10; 
		println!("3.输出 x:{x}"); // 10
	}

  	let x = x + 100;
	println!("4.输出 x:{x}"); // 102 

}

Rust作用域

let num = 123;
{
    let num = 321;
    println!('num: {num}'); // 输出 num: 321
}
println!('num: {num}'); // 输出 num: 123

{ }中 num 在 作用域 中是有效的.

内存分配

下面通过一段代码, 简单讲述下内存分配和垃圾回收.

{
    let str = String::from('Hello'); // rust 中 String 分配 堆 上
    println!("使用 str {}",str); //使用
} // 作用域结束
// str 无效, rust 自动调用 drop 函数, 释放内存.