变量绑定与解构

未匹配的标注

变量绑定与解构

绑定和可变性

  1. 🌟 变量只有在初始化后才能被使用

`

// 修复下面代码的错误并尽可能少的修改

fn main() {

let x: i32; // 未初始化,但被使用

let y: i32; // 未初始化,也未被使用

println!("x is equal to {}", x); 

}

`

  1. 🌟🌟 可以使用 mut 将变量标记为可变

`

// 完形填空,让代码编译

fn main() {

let __ = 1;

__ += 2; 

println!("x = {}", x); 

}

`

变量作用域

  1. 🌟 作用域是一个变量在程序中能够保持合法的范围

`

// 修复下面代码的错误并使用尽可能少的改变

fn main() {

let x: i32 = 10;

{

 let y: i32 = 5;

 println!("x 的值是 {}, y 的值是 {}", x, y);

}

println!("x 的值是 {}, y 的值是 {}", x, y); 

}

`

  1. 🌟🌟

`

// 修复错误

fn main() {

println!("{}, world", x); 

}

fn define_x() {

let x = "hello";

}

`

变量遮蔽( Shadowing )

  1. 🌟🌟 若后面的变量声明的名称和之前的变量相同,则我们说:第一个变量被第二个同名变量遮蔽了( shadowing )

`

// 只允许修改 assert_eq! 来让 println! 工作(在终端输出 42)

fn main() {

let x: i32 = 5;

{

 let x = 12;

 assert_eq!(x, 5);

}

assert_eq!(x, 12);

let x = 42;

println!("{}", x); // 输出 "42".

}

`

  1. 🌟🌟 删除一行代码以通过编译

`

fn main() {

let mut x: i32 = 1;

x = 7;

// 遮蔽且再次绑定

let x = x; 

x += 3;

let y = 4;

// 遮蔽

let y = "I can also be bound to text!"; 

}

`

未使用的变量

  1. 使用以下方法来修复编译器输出的 warning :
  • 🌟 一种方法
  • 🌟🌟 两种方法

注意: 你可以使用两种方法解决,但是它们没有一种是移除 let x = 1 所在的代码行

`

fn main() {

let x = 1; 

}

// compiler warning: unused variable: x

`

变量解构

  1. 🌟🌟 我们可以将 let 跟一个模式一起使用来解构一个元组,最终将它解构为多个独立的变量

提示: 可以使用变量遮蔽或可变性

`

// 修复下面代码的错误并尽可能少的修改

fn main() {

let (x, y) = (1, 2);

x += 2;

assert_eq!(x, 3);

assert_eq!(y, 2);

}

`

解构式赋值

该功能于 Rust 1.59 版本引入:你可以在赋值语句的左式中使用元组、切片或结构体进行匹配赋值。

  1. 🌟🌟

Note: 解构式赋值只能在 Rust 1.59 或者更高版本中使用

`

fn main() {

let (x, y);

(x,..) = (3, 4);

[.., y] = [1, 2];

// 填空,让代码工作

assert_eq!([x,y], __);

}

`

答案 在 solutions 下面

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~