Rust 程序设计(第 2 版)
Jim Blandy, Jason Orendorff, Leonora F. S. Tindall
软件工程师
1469 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
课程目录
已完结/共 41 讲
时长 02:41
时长 06:30
时长 10:04
时长 01:05
时长 50:06
时长 31:35
时长 34:39
时长 29:11
时长 37:15
时长 23:44
时长 44:19
时长 29:54
时长 39:01
时长 01:38
时长 01:15
时长 00:37
Rust 程序设计(第 2 版)
15
15
1.0x
00:00/00:00
登录|注册

第 17 章 字符串与文本(2)

17.4 格式化各种值

本书一直在使用像 println! 这样的文本格式化宏:
println!("{:.3}μs: relocated {} at {:#x} to {:#x}, {} bytes",
0.84391, "object",
140737488346304_usize, 6299664_usize, 64);
上述调用会生成如下输出:
0.844μs: relocated object at 0x7fffffffdcc0 to 0x602010, 64 bytes
字符串字面量可以用作输出模板:模板中的每个 {...} 都会被其后跟随的某个参数的格式化形式替换。模板字符串必须是常量,以便 Rust 在编译期根据参数的类型检查它。每个参数在检查时必须都用到,否则 Rust 就会报告编译期错误。
以下几个标准库特性中都有这种用于格式化字符串的小型语言。
format! 宏会用它来构建 String
println! 宏和 print! 宏会将格式化后的文本写入标准输出流。
writeln! 宏和 write! 宏会将格式化后的文本写入指定的输出流。
panic! 宏会使用它构建一个信息丰富的异常终止描述。
Rust 格式化工具的设计是开放式的。你可以通过实现 std::fmt 模块的格式化特型来扩展这些宏以支持自己的类型。也可以使用 format_args! 宏和 std::fmt::Arguments 类型来让自己的函数和宏支持格式化语言。
格式化宏总会借入对其参数的共享引用,但永远不会拥有或修改它们。
模板的 {...} 形式称为格式参数,具体形式为 {<i>which</i>:<i>how</i>}Whichhow 都是可选的,很多时候用 {} 就行。
which(哪个)值用于选择模板后面的哪个实参应该取代该形参的位置。可以按索引或名称选择实参。没有 which 值的形参只会简单地从左到右与实参配对。
how(如何)值表示应如何格式化参数:如何填补、精度如何、数值基数等。如果存在 how,则需要写上前面的冒号。
表 17-4 给出了一些示例。
表 17-4:格式化字符串示例
模板字符串参数列表结果
"number of {}: {}""elephants", 19"number of elephants: 19"
"from to ""the grave", "the cradle""from the cradle to the grave"
"v = {:?}"vec![0,1,2,5,12,29]"v = [0, 1, 2, 5, 12, 29]"
"name = {:?}""Nemo""name = \"Nemo\""
"{:8.2} km/s"11.186" 11.19 km/s"
"{:20} {:02x} {:02x}""adc #42", 105, 42"adc #42 69 2a"
" ""adc #42", 105, 42"69 2a adc #42"
" "insn="adc #42", lsb=105, msb=42"69 2a adc #42"
"{:02?}"[110, 11, 9]"[110, 11, 09]"
"{:02x?}"[110, 11, 9]"[6e, 0b, 09]"
如果要在输出中包含 {} 字符,可将模板中的这些字符连写两个。
assert_eq!(format!("{} ⊂ {}"),
" ⊂ ");

17.4.1 格式化文本值

当格式化像 &strString(将 char 视为单字符字符串)这样的文本类型时,参数的 how 值有几个部分,都是可选的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了Rust中字符串格式化的重要性和技术细节。通过示例和表格,详细解释了格式化字符串的各种指令和参数,包括文本长度限制、最小字段宽度、对齐方式和填补字符等。文章还探讨了Rust格式化工具的设计开放性,以及如何通过实现特定模块来扩展宏以支持自定义类型。此外,还介绍了一些注意事项,如处理Unicode字符、处理智能指针类型以及格式化数值时的各种参数。除了字符串和数值,还可以格式化标准库中的其他几种类型,如错误类型、互联网协议地址类型和布尔值。为了帮助调试和记录日志,文章还介绍了如何使用{:?}参数以对程序员有帮助的方式格式化Rust标准库中的任何公共类型。另外,还介绍了如何格式化指针以进行调试,以及如何按索引或名称引用参数。总的来说,本文为读者提供了全面的关于Rust字符串格式化的指导,使他们能够更好地理解和应用这一技术。文章内容深入浅出,适合技术人员快速了解Rust字符串格式化的重要概念和技术特点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Rust 程序设计(第 2 版)》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部