一、占位符
println! 宏的占位符主要基于 Rust 的格式化语法,它支持多种占位符格式来插入和格式化不同的值。除了 {} 和 {:?} 之外,还有其他几种形式:
-
基本占位符
{}:用于插入任何实现了Displaytrait 的类型的值。 -
调试占位符
{:?}:用于插入任何实现了Debugtrait 的类型的值,通常用于调试目的,因为它会提供更详细的输出。 -
格式说明符
{:fmt}:其中fmt是格式字符串,允许你更详细地控制值的输出。例如,你可以控制整数的基数({:x}表示十六进制),浮点数的精度({:.2f}表示两位小数),字符串的宽度和对齐方式等。let num = 255; println!("Hex: {:x}", num); // 输出: Hex: ff -
命名参数
{name}:在复杂的格式化字符串中,你可以给占位符命名,并在后面通过format!宏的参数列表提供值。let name = "Alice"; let age = 30; println!("Name: {name}, Age: {age}", name=name, age=age); // 输出: Name: Alice, Age: 30 -
位置参数
{0}、{1}等:你也可以通过位置来引用format!宏参数列表中的值。位置从 0 开始。let name = "Alice"; let age = 30; println!("Name: {0}, Age: {1}", name, age); // 输出: Name: Alice, Age: 30 -
宽度、精度和填充:你可以在格式说明符中指定字段的宽度、精度和填充字符。
let num = 123; println!("Number: {:>10}", num); // 输出: Number: 123 (右对齐,总宽度为10) println!("Number: {:<10}", num); // 输出: Number: 123 (左对齐,总宽度为10) println!("Number: {:^10}", num); // 输出: Number: 123 (居中对齐,总宽度为10) println!("Number: {:0>10}", num); // 输出: Number: 0000000123 (右对齐,用0填充至总宽度10) -
二进制、八进制、十进制和十六进制:你可以使用不同的格式说明符来以不同的基数显示整数。
let num = 255; println!("Dec: {:d}", num); // 输出: Dec: 255 (十进制) println!("Hex: {:x}", num); // 输出: Hex: ff (十六进制) println!("Bin: {:b}", num); // 输出: Bin: 11111111 (二进制) println!("Oct: {:o}", num); // 输出: Oct: 3ff (八进制)
这些格式说明符可以组合使用,以提供几乎无限的格式化选项。如果你需要更复杂的格式化,还可以查阅 Rust 的官方文档来了解更多细节和可用的格式化选项。
二、关于 fmt 占位符
在 Rust 的格式化字符串中,{:fmt} 是一个占位符,其中 fmt 表示具体的格式说明符。这些格式说明符用于控制如何显示不同类型的数据。以下是一些常用的格式说明符的详细清单:
整数类型
{:d}或{}:十进制表示。{:x}或{:X}:十六进制表示,小写x为小写字母,大写X为大写字母。{:o}:八进制表示。{:b}:二进制表示。{:#b}、{:#o}、{:#x}、{:#X}:带有前缀的二进制、八进制、十六进制表示(例如0b1010、0o123)。{:0width}:用零填充到指定的宽度。
浮点数类型
{:f}:默认的小数表示。{:.precision}或{:f.precision}:指定小数点后的精度。{:e}:科学计数法表示。{:E}:科学计数法表示,使用大写E。{:g}或{:G}:根据数值大小自动选择f或e/E表示法。{:a}或{:A}:十六进制浮点数表示。
字符串和字符类型
{:s}:字符串表示。{:c}:字符表示。{:width}:指定最小字段宽度。{:>width}、{:<width}、{:^width}:指定宽度和对齐方式(右对齐、左对齐、居中对齐)。{:.width}:截断到指定宽度。{:-}:左对齐,且不使用空格填充。{:+}:对于数值类型,总是在正数前面显示加号。{: }(包含一个空格):在正数前面添加空格。
其他
{:?}:调试格式,通常用于显示枚举和复合类型的内部表示。{:p}:指针的地址表示。{:#}:对于某些类型(如浮点数),使用替代格式。{:width$}:位置参数,用于指定宽度等属性的值。
组合使用
格式说明符可以组合使用,例如 {:010.2f} 会将浮点数格式化为宽度至少为10(不足部分用0填充),且小数点后有两位的字符串。
这只是格式说明符的一部分清单,Rust 的格式化系统非常灵活和强大,支持更多的选项和组合。要获取完整的格式说明符清单和更详细的信息,建议查阅 Rust 的官方文档或相关资源。