在Rust格式化字符串中,{:?}代表什么意思?

55

我发现在Rust中,{:?}可以打印整个数组。我想知道它的名称以及它是如何工作的。它仅限于打印数组吗?还是也可以在其他地方用于其他目的?

2个回答

73

这个格式化语法(以及其他的格式化语法)在std::fmt文档中有解释。

{...}包含所有的格式化指令。冒号:将要被格式化的对象的名称或序号(在这种情况下省略,因此表示“下一个对象”)与格式化选项分开。问号?是一个格式化选项,它触发使用正在被格式化的对象的std::fmt::Debug实现,而不是默认的Display trait或其他trait(例如UpperHexOctal)。

因此,{:?}格式化“下一个”传递给格式化宏的值,并支持任何实现Debug的对象。


19

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,
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接