【发布时间】:2019-01-19 13:57:30
【问题描述】:
如果已实现,我想打印带有 Display 特征的变量,否则打印带有 Debug 特征的变量。所有类型在编译时都是已知的。
let display = MyDisplayType::new(); // implements Display
let debug = MyDebugType::new(); // implements Debug
output!(display); // uses Display a.k.a. println!("{}", display);
output!(debug); // uses Debug a.k.a. println!("{:?}", debug);
什么是最干净的方法?
【问题讨论】:
-
我相信Is it possible to check if an object implements a trait at runtime?的答案已经回答了您的问题。如果您不同意,请edit您的问题解释差异。否则,我们可以将此问题标记为已回答。
-
我认为其他问题不相关。如果未实现 Display,我只需要一个宏(不是函数),它使用 Display 或 Debug 打印变量。
-
宏扩展为代码,在它们扩展时,类型信息尚不可用。所以宏不会有帮助。无论如何,如果您想使用
Display或Debug进行格式化,这可能意味着您只需要Debug。 -
@Boiethios,复制它。适合我的问题。
-
我会说这不是重复的。编译时间!=运行时间。我试图弄清楚如何在编译时断言变量实现了一个特征。这是相似的,但不完全相同的问题。 :(
标签: reflection rust polymorphism output traits