{:?}在Rust格式字符串中的含义是什么?

7_R*_*R3X 8 arrays rust

我发现{:?}在Rust 中打印整个数组.我想知道它叫什么,它究竟是如何工作的.它仅限于打印阵列还是可以用于其他目的?

at5*_*321 21

Debug特征是 Rust 中最常用的特征之一。它允许您在面向程序员的调试上下文中格式化输出。您通常使用它的方式是这样的:

let v = vec![1, 2, 3];
let s = format!("{:?}", v);
Run Code Online (Sandbox Code Playgroud)

另外,从 Rust 1.58 开始,您可以通过将变量放在左大括号后面来调试变量格式,如下所示:

let s = format!("{v:?}");
Run Code Online (Sandbox Code Playgroud)

如果您想调试自定义类型(例如结构体),您可以简单地使用derive如下:

#[derive(Debug)]
struct Person {
    name: String,
    age: u8,
}
Run Code Online (Sandbox Code Playgroud)


DK.*_*DK. 16

std::fmt文档中解释了这一点(以及其余的格式化语法).

{...}包围所有格式化指令. 从格式化选项中:分离被格式化的东西的名称或序号(在这种情况下被省略,因此意味着"下一件事").这?是一个格式化选项,触发使用std::fmt::Debug正在格式化的事物的实现,而不是默认Display特征,或其他特征之一(如UpperHexOctal).

因此,{:?}格式化传递给格式化宏的"下一个"值,并支持实现的任何内容Debug.