我有两个(希望是等效的)函数,类似于:
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
不是 Clone
或 Copy
的实例。 我可以使它成为 Clone
然后进行 clone
,但这仍然会引入不必要的运行时债务,并且也使代码看起来更难看)。理想情况下,我应该首先调用 slow_summary
,再调用 fast_summary
,但是如何在确保只有在开启调试断言时才调用 slow_summary
的情况下实现呢?