断言具有副作用的函数的 return 值的 Rust 方法是什么?

What's the Rust way of asserting on the return value of a function that has side effects?

在C中,断言可以通过定义NDEBUG来消失,所以我们倾向于这样写:

const bool ok = my_function();
assert(ok);

但是,无论配置如何,Rust 中的断言似乎始终存在于每种类型的构建中,所以认为更好的是:

let ok = my_function();
assert!(ok);

或者:

assert!(my_function());

it looks like asserts in Rust are always present in every type of build

是的,assert! is always there, but debug_assert! 仅在调试版本中启用。


what's considered better

这是基于意见的。做任何让你开心的事。我个人一直被将副作用代码放入由于条件编译而消失的代码中的次数比我想要的次数多,所以我赞成将断言单独一行。但是,当断言被编译掉时,这将导致未使用的变量警告。

更好的是,重新评估为什么你在断言中有副作用;我敢打赌这几乎总是一个坏主意。