1个不稳定版本
0.1.0 | 2021年9月27日 |
---|
#9 in #maybe
每月下载 27 次
在 3 个crate 中使用
18KB
281 行
maybe-debug
通过特殊化实现任何类型的 Debug
假设你有一个以下这样的函数,并且你希望在循环中插入一个 dbg!()
语句。
fn sort<T>(target: &mut [T]) {
for (i, val) in target.iter().enumerate() {
dbg!(i);
// various sorting goodness
dbg!(i, val); // ERROR: T is not Debug
}
}
你可以使用 maybe_debug::maybe_debug()
来解决这个问题。如果 T
是 Debug
,它将 'cast' 它。如果 T
不是 !Debug,它将回退到一个合理的默认值(打印类型名称)。
fn sort<T>(target: &mut [T]) {
for (i, val) in target.iter().enumerate() {
maybe_debug::dbg!(i);
// various sorting goodness
maybe_debug::dbg!(i, val); // On nightly, will specialize if 'T: Debug'
}
}
这提供了一个回退以在稳定版Rust(没有特殊化)上工作。在这种情况下,“cast”总是失败,并且 maybe-debug
将无条件使用回退。