如何在 Rust 中打印变量并让它显示有关该变量的所有内容,例如 Ruby 的 .inspect?

Posted

技术标签:

【中文标题】如何在 Rust 中打印变量并让它显示有关该变量的所有内容,例如 Ruby 的 .inspect?【英文标题】:How do I print variables in Rust and have it show everything about that variable, like Ruby's .inspect? 【发布时间】:2016-12-26 15:41:18 【问题描述】:
use std::collections::HashMap;

fn main() 
    let mut hash = HashMap::new();
    hash.insert("Daniel", "798-1364");
    println!("", hash);

将无法编译:

error[E0277]: `std::collections::HashMap<&str, &str>` doesn't implement `std::fmt::Display`
 --> src/main.rs:6:20
  |
6 |     println!("", hash);
  |                    ^^^^ `std::collections::HashMap<&str, &str>` cannot be formatted with the default formatter
  |

有没有办法这样说:

println!("", hash.inspect());

并打印出来:

1) "Daniel" => "798-1364"

【问题讨论】:

【参考方案1】:

您正在寻找的是Debug 格式化程序:

use std::collections::HashMap;

fn main() 
    let mut hash = HashMap::new();
    hash.insert("Daniel", "798-1364");
    println!(":?", hash);

这应该打印出来:

"Daniel": "798-1364"

另见:

What is the difference between println's format styles?

【讨论】:

对于自定义严格 a,您需要使用 #derive(Debug) 特征来装饰它们。 rustbyexample.com/trait/derive.html【参考方案2】:

Rust 1.32 引入了 dbg 宏:

use std::collections::HashMap;

fn main() 
    let mut hash = HashMap::new();
    hash.insert("Daniel", "798-1364");
    dbg!(hash);

这将打印:

[src/main.rs:6] hash = 
    "Daniel": "798-1364"

?

【讨论】:

以上是关于如何在 Rust 中打印变量并让它显示有关该变量的所有内容,例如 Ruby 的 .inspect?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Rust中打印变量的类型?

角度材质如何单击表格中的一行并让它将一个特定单元格的内容返回到变量中?

如何将提及变量转换为普通变量并将其打印到我的终端

有没有办法在不同的类中设置一个等于变量的值,并让它保持第一次运行的值而不必每次都运行?

如何让全局变量 int 高和低以在显示功能中打印? (这两个变量显示最高和最低分)

Robot Framework 中的静态变量