龙空技术网

Rust编程语言-结构体示例

自由的熊猫V 67

前言:

眼前咱们对“结构体示例”大约比较关心,你们都想要了解一些“结构体示例”的相关内容。那么小编也在网络上网罗了一些关于“结构体示例””的相关知识,希望姐妹们能喜欢,看官们一起来了解一下吧!

摘要示例程序#[derive(Debug)]{:?}{:#?}示例程序

我们想实现一个长方形面积计算的时候可以这样实现

fn main() {    let width = 10;    let height = 3;    println!("{}", area(width, height));}fn area(width: u32, height: u32) -> u32 {    width * height}

函数 area 本应该计算一个长方形的面积,不过函数却有两个参数。这两个参数是相关联的,不过程序本身却没有表现出这一点。将长度和宽度组合在一起将更易懂也更易处理。我们可以使用:元组

fn main() {    let rec = (10, 3);    println!("{}", area(rec));}fn area(rec: (u32, u32)) -> u32 {    rec.0 * rec.1}

长方形有长和宽,元组也无法体现出来,所以我们可以在用元组将长方形的长和宽体现出来:

struct Rectangle {    width: u32,    height: u32,}fn main() {    let rec = Rectangle {        width: 10,        height: 3,    };		    // 如果不使用rec的引用,那么rec传入方法,在方法执行之后就会被释放掉。后面就无法使用了    // 为了后面可以使用,所以使用引用    println!("{}", area(&rec));}// 使用的长方形的引用,这样不会发生所有权转移fn area(rec: &Rectangle) -> u32 {    rec.width * rec.height}

使用引用不会导致rec所有权发生转移,后面可以使用,那我们打印一下rec结构体试一下。

struct Rectangle {    width: u32,    height: u32,}fn main() {    let rec = Rectangle {        width: 10,        height: 3,    };		    println!("{}", area(&rec));    println!("{}", rec);}fn area(rec: &Rectangle) -> u32 {    rec.width * rec.height}

加了打印rec之后,我们的程序编译失败了,看一下失败信息:

从上图可以看到说结构体没有实现 std::fmt::Display ,建议使用 {:?} 进行打印。

基础变量都是实现了 std::fmt::Display 所以可以打印出来,但是结构体因为不知道你要打印成什么样子,所以没有实现Display。

那么我们使用建议进行打印试试:

println!("{:?}", rec);

编译如下(任然报错):

编译任然报错,但是建议里面说我们可以给 Rectangle 结构体加上注解 #[derive(Debug)]

#[derive(Debug)]struct Rectangle {    width: u32,    height: u32,}fn main() {    let rec = Rectangle{        width:10,        height:3,    };    println!("{}", area(&rec));    println!("{:?}", rec)}fn area(rec: &Rectangle) -> u32 {    rec.width * rec.height}

输出:

Compiling rust-learn01 v0.1.0 (D:\workspace-rust\rust-learn01)

Finished dev [unoptimized + debuginfo] target(s) in 0.61s

Running `target\debug\rust-learn01.exe`

30

Rectangle { width: 10, height: 3 }

当内容比较多的时候,可以使用 {:#?} 进行输出:

Compiling rust-learn01 v0.1.0 (D:\workspace-rust\rust-learn01)

Finished dev [unoptimized + debuginfo] target(s) in 0.66s

Running `target\debug\rust-learn01.exe`

30

Rectangle {

width: 10,

height: 3,

}

#[derive(Debug)]

#[derive(Debug)] 是Rust语言中的一个属性(attribute),用于自动生成实现 Debug trait 的代码。Debug trait 提供了一种格式化输出结构体和枚举类型的能力,以便于调试和打印调试信息。

当你在一个结构体或枚举上添加 #[derive(Debug)] 属性时,Rust编译器会自动生成相应的 Debug trait 实现代码。这使得你可以使用 println! 宏或 dbg! 宏来打印结构体或枚举的调试信息。

标签: #结构体示例