println!() 仅当对象实现 Debug 特征时

Dje*_*ent 4 rust

我的结构中有方法,它采用泛型类型T。该类型可能实现Debug特征,但我的结构不需要它。
我需要调试我的应用程序,并且能够打印它会非常有用。不幸的是,我不能这样做,因为该类型可能未实现Debug特征。我可以在我的结构定义中指定T: Debug,但我需要在很多地方添加它以便我的代码进行编译。println!()仅当类型实现此特征时才可以调用宏吗?

像这样的东西:

if argument.implements(Debug) {
    println!("{:?}", argument);
}
Run Code Online (Sandbox Code Playgroud)

kmd*_*eko 7

目前这是不可能的。使用任何特征都需要封闭函数具有该约束。

然而,当特质专业化稳定后,这是可能的。例如,debugit crate在使用 nightly 编译时提供条件调试打印。