格式化打印

打印功能由 std::fmt 中定义的一系列处理,其中包括:

  • format!:将格式化文本写入 String
  • print!:与 format! 类似,但文本会打印到控制台(io::stdout)
  • println!:与 print! 类似,但会在末尾添加换行符
  • eprint!:与 print! 类似,但文本会打印到标准错误输出(io::stderr)
  • eprintln!:与 eprint! 类似,但会在末尾添加换行符

所有这些宏都以相同的方式解析文本。此外,Rust 会在编译时检查格式化的正确性。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

std::fmt 包含许多控制文本显示的 traits。下面列出了两个重要的基本形式:

  • fmt::Debug: 使用 {:?} 标记。用于调试目的的文本格式化。
  • fmt::Display: 使用 {} 标记。以更优雅、用户友好的方式格式化文本。

这里我们使用 fmt::Display,因为标准库为这些类型提供了实现。要打印自定义类型的文本,需要额外的步骤。

实现 fmt::Display 特性会自动实现 ToString 特性,这允许我们将该类型转换String

43 行#[allow(dead_code)]是一个 属性(attribute),它只适用于它之后的模块。

练习

  • 修复上述代码中的问题(参见 FIXME 注释),使其能够正常运行。
  • 尝试取消注释那行尝试格式化 Structure 结构体的代码(参见 TODO 注释)
  • 添加一个 println! 宏调用,打印:Pi 约等于 3.142,通过控制显示的小数位数来实现。 在本练习中,使用 let pi = 3.141592 作为 pi 的近似值。(提示:你可能需要查阅 std::fmt 文档来了解如何设置显示的小数位数)

另请参阅:

std::fmtmacrosstructtraitsdead_code