#debugging #specialization #no-std #anything #dbg #maybe #target

no-std maybe-debug

通过特殊化实现 Any 的 Debug

1个不稳定版本

0.1.0 2021年9月27日

#9 in #maybe

每月下载 27
3 个crate 中使用

MIT/Apache

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() 来解决这个问题。如果 TDebug,它将 '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 将无条件使用回退。

依赖项