前言:
眼前咱们对“结构体示例”大约比较关心,你们都想要了解一些“结构体示例”的相关内容。那么小编也在网络上网罗了一些关于“结构体示例””的相关知识,希望姐妹们能喜欢,看官们一起来了解一下吧!摘要示例程序#[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! 宏来打印结构体或枚举的调试信息。
标签: #结构体示例