在具有副作用的函数的返回值上声明的Rust方式是什么?

时间:2018-07-20 20:21:14

标签: debugging rust assert

在C语言中,断言可以通过定义NDEBUG而消失,因此我们倾向于编写如下内容:

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

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

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

或者:

assert!(my_function());

1 个答案:

答案 0 :(得分:5)

  

Rust中的断言似乎总是出现在每种类型的构建中

是的,assert!始终存在,但是debug_assert!仅在调试版本中启用。


  

什么被认为更好

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

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