我发现在Rust中,{:?}
可以打印整个数组。我想知道它的名称以及它是如何工作的。它仅限于打印数组吗?还是也可以在其他地方用于其他目的?
这个格式化语法(以及其他的格式化语法)在std::fmt
文档中有解释。
{...}
包含所有的格式化指令。冒号:
将要被格式化的对象的名称或序号(在这种情况下省略,因此表示“下一个对象”)与格式化选项分开。问号?
是一个格式化选项,它触发使用正在被格式化的对象的std::fmt::Debug
实现,而不是默认的Display
trait或其他trait(例如UpperHex
或Octal
)。
因此,{:?}
格式化“下一个”传递给格式化宏的值,并支持任何实现Debug
的对象。
Debug
特质是 Rust 中最常用的之一, 它允许您以面向程序员的调试上下文格式化输出。 您通常使用它的方式像这样:
let v = vec![1, 2, 3];
let s = format!("{:?}", v);
此外,从Rust 1.58版本开始,您可以通过将变量放置在左花括号后面,像这样进行Debug格式化:
let s = format!("{v:?}");
如果您想对自定义类型(例如结构体)进行调试格式化,只需像这样使用derive
:
如果您想要对自定义类型(例如结构体)进行调试格式化,您可以简单地使用derive
来实现:
#[derive(Debug)]
struct Person {
name: String,
age: u8,
}