You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.5 KiB

使用struct的场景

不使用结构

计算由单独的宽度和高度变量指定的矩形的面积,相关性较差。将宽度和高度组合在一起会更具可读性和更易于管理

image-20230105164036047

用元组进行重构

我们现在只传递一个参数。但是现在对具体的width和height没有明确的命名。可能会使人混淆。

image-20230105165206949

使用结构重构(增加更多信息)

传递一个结构体引用(要是不想要owner了,传整体也行)给函数。我们想要借用结构而不是拥有它。这样,main保留其所有权并可以继续使用rect1,这就是我们&在函数签名和调用函数的地方使用的原因。

image-20230105170634770

使用派生特征添加有用的功能

我们看到的基本类型Display都是默认实现的,因为只有一种方式可以向1用户显示一个或任何其他基本类型。但是对于结构, println!格式化输出的方式就不那么清晰了,因为有更多的显示可能性。

image-20230105234833237

以调试模式打印,但我们必须明确选择让该功能可用于我们的结构。

image-20230105235153536

修改后:

image-20230105235736674

加强版的输出 {:#?}

image-20230105235843271

trait

在 Rust 中,trait 是用来描述类型的一组特征的。trait 可以被用来定义共同的行为,并被多个类型实现。

一些常见的 trait 包括:

  • Clone: 这个 trait 允许我们复制值,而不是移动它们。
  • Copy: 这个 trait 允许我们在移动或覆盖值的同时保留一个副本。
  • Debug: 这个 trait 允许我们用 {:?} 格式化调试输出。
  • Eq: 这个 trait 允许我们比较两个值是否相等。
  • Ord: 这个 trait 允许我们比较两个值的大小。
  • PartialEq: 这个 trait 允许我们比较两个值是否相等,但是类型不必完全匹配。
  • PartialOrd: 这个 trait 允许我们比较两个值的大小,但是类型不必完全匹配。
  • Hash: 这个 trait 允许我们使用值作为键值。

这些 trait 都是 Rust 标准库中内置的。你也可以自己定义新的 trait。

dbg!宏打印

并且它不需要取该表达式的引用(反而是将表达式的所有权交还给它)。它会打印出该dbg!宏调用在代码中的文件名和行号以及该表达式的值,然后返回该值的所有权

调用 dbg! 宏会将信息输出到标准错误控制台流 (stderr),而 println! 则会输出到标准输出控制台流 (stdout)。这意味着,使用 dbg! 宏输出的信息会出现在终端的错误信息中,而使用 println! 输出的信息则出现在终端的正常输出中。

简单案例:

image-20230106000951815

本案例:

image-20230106001535351