第 17 章 字符串与文本(2)
吉姆•布兰迪
17.4 格式化各种值
本书一直在使用像 println! 这样的文本格式化宏:
上述调用会生成如下输出:
字符串字面量可以用作输出模板:模板中的每个 {...} 都会被其后跟随的某个参数的格式化形式替换。模板字符串必须是常量,以便 Rust 在编译期根据参数的类型检查它。每个参数在检查时必须都用到,否则 Rust 就会报告编译期错误。
以下几个标准库特性中都有这种用于格式化字符串的小型语言。
format! 宏会用它来构建 String。
println! 宏和 print! 宏会将格式化后的文本写入标准输出流。
writeln! 宏和 write! 宏会将格式化后的文本写入指定的输出流。
panic! 宏会使用它构建一个信息丰富的异常终止描述。
Rust 格式化工具的设计是开放式的。你可以通过实现 std::fmt 模块的格式化特型来扩展这些宏以支持自己的类型。也可以使用 format_args! 宏和 std::fmt::Arguments 类型来让自己的函数和宏支持格式化语言。
格式化宏总会借入对其参数的共享引用,但永远不会拥有或修改它们。
模板的 {...} 形式称为格式参数,具体形式为 {<i>which</i>:<i>how</i>}。Which 和 how 都是可选的,很多时候用 {} 就行。
which(哪个)值用于选择模板后面的哪个实参应该取代该形参的位置。可以按索引或名称选择实参。没有 which 值的形参只会简单地从左到右与实参配对。
how(如何)值表示应如何格式化参数:如何填补、精度如何、数值基数等。如果存在 how,则需要写上前面的冒号。
表 17-4 给出了一些示例。
表 17-4:格式化字符串示例
如果要在输出中包含 { 或 } 字符,可将模板中的这些字符连写两个。
17.4.1 格式化文本值
当格式化像 &str 或 String(将 char 视为单字符字符串)这样的文本类型时,参数的 how 值有几个部分,都是可选的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了Rust中字符串格式化的重要性和技术细节。通过示例和表格,详细解释了格式化字符串的各种指令和参数,包括文本长度限制、最小字段宽度、对齐方式和填补字符等。文章还探讨了Rust格式化工具的设计开放性,以及如何通过实现特定模块来扩展宏以支持自定义类型。此外,还介绍了一些注意事项,如处理Unicode字符、处理智能指针类型以及格式化数值时的各种参数。除了字符串和数值,还可以格式化标准库中的其他几种类型,如错误类型、互联网协议地址类型和布尔值。为了帮助调试和记录日志,文章还介绍了如何使用{:?}参数以对程序员有帮助的方式格式化Rust标准库中的任何公共类型。另外,还介绍了如何格式化指针以进行调试,以及如何按索引或名称引用参数。总的来说,本文为读者提供了全面的关于Rust字符串格式化的指导,使他们能够更好地理解和应用这一技术。文章内容深入浅出,适合技术人员快速了解Rust字符串格式化的重要概念和技术特点。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论