格式化打印
打印功能由 std::fmt
中定义的一系列宏
处理,其中包括:
format!
:将格式化文本写入String
print!
:与format!
类似,但文本会打印到控制台(io::stdout)println!
:与print!
类似,但会在末尾添加换行符eprint!
:与print!
类似,但文本会打印到标准错误输出(io::stderr)eprintln!
:与eprint!
类似,但会在末尾添加换行符
所有这些宏都以相同的方式解析文本。此外,Rust 会在编译时检查格式化的正确性。
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
文档来了解如何设置显示的小数位数)