Bar fn fast_summary(foo: Foo) -> Bar 我想在调用站点添加一个 deb-6ren">
gpt4 book ai didi

debugging - 如何在rust中编写 "non-assert"调试代码

转载 作者:行者123 更新时间:2023-12-03 11:24:45 24 4
gpt4 key购买 nike

我有两个(我希望)等效功能,例如:

fn slow_summary(foo: &Foo) -> Bar
fn fast_summary(foo: Foo) -> Bar
我想在调用站点添加一个 debug_assert 语句,快速摘要给出与慢速摘要相同的结果。例如。
fn bar(foo: Foo) -> Baz {
let summary = fast_summary(foo);
debug_assert_eq!(summary, slow_summary(&foo));
baz(summary)
}
但我不能这样做,因为 foo已被 fast_summary 的调用占用( Foo 不是 CloneCopy 的一个实例。我可以将其设为 Clone 然后 clone 但这仍然会引入不必要的运行时债务,并且还会使代码看起来更丑陋)。理想情况下,我会调用 slow_summary第一的。然后调用 fast_summary , 但是我如何在确保 slow_summary 的同时做到这一点仅在打开调试断言时调用?

最佳答案

您可以使用conditional compilationdebug_assertions健康)状况:

fn bar(foo: Foo) -> Baz {
let calculated_slow_summary: Bar;
#[cfg(debug_assertions)]
{
calculated_slow_summary = slow_summary(&foo);
}
let summary = fast_summary(foo);
debug_assert_eq!(summary, calculated_slow_summary);
baz(summary)
}

关于debugging - 如何在rust中编写 "non-assert"调试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65171466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com