Debugging 什么';断言具有副作用的函数的返回值的方法是什么?

Debugging 什么';断言具有副作用的函数的返回值的方法是什么?,debugging,rust,assert,Debugging,Rust,Assert,在C语言中,通过定义NDEBUG,断言可以消失,因此我们倾向于编写以下内容: const bool ok=my_函数(); 断言(ok); 然而,看起来Rust中的断言总是存在于每种类型的构建中,而不管配置如何,因此什么是更好的选择: let ok = my_function(); assert!(ok); 或: 看起来,在每种类型的构建中,都会出现锈迹中的断言 是的,始终存在,但仅在调试版本中启用 什么被认为更好 这是基于意见的。做任何让你快乐的事。我个人一直被折磨着,因为在由于条件编译

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

const bool ok=my_函数();
断言(ok);
然而,看起来Rust中的断言总是存在于每种类型的构建中,而不管配置如何,因此什么是更好的选择:

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

看起来,在每种类型的构建中,都会出现锈迹中的断言

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


什么被认为更好

这是基于意见的。做任何让你快乐的事。我个人一直被折磨着,因为在由于条件编译而消失的代码中放入副作用代码的次数比我想要的要多,所以我倾向于将断言作为单独的一行。但是,在编译断言时,这将导致未使用的变量警告

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

看起来,在每种类型的构建中,都会出现锈迹中的断言

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


什么被认为更好

这是基于意见的。做任何让你快乐的事。我个人一直被折磨着,因为在由于条件编译而消失的代码中放入副作用代码的次数比我想要的要多,所以我倾向于将断言作为单独的一行。但是,在编译断言时,这将导致未使用的变量警告


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

哪个更常见?锈迹似乎决定了许多风格决定,我很惊讶这不是其中之一。@user1000039断言一个副作用函数的方式都不常见,因为断言一个副作用函数只是一个坏主意。我们没有理由对我们不应该首先编写的代码使用习惯用法。当涉及到断言一个无副作用的函数时,我希望
assert!(一些布尔函数())
会更常见,因为它比较短。对于可能失败的函数,最常用的用法是返回
结果,而不是
bool
。因此,如果您想在函数失败时惊慌失措,就不要断言
在它上面,您将
.unwrap()
结果。为什么不使用带前导下划线的变量:
让_ok=。。。;明确肯定(_ok),这将使警告静音。@MatthieuM。但在一半的编译中,您使用的是变量。当然,有很多方法可以让这个警告保持沉默,但我的观点更接近于“想想为什么你首先会有一个警告”。哪个更常见?锈迹似乎决定了许多风格决定,我很惊讶这不是其中之一。@user1000039断言一个副作用函数的方式都不常见,因为断言一个副作用函数只是一个坏主意。我们没有理由对我们不应该首先编写的代码使用习惯用法。当涉及到断言一个无副作用的函数时,我希望
assert!(一些布尔函数())
会更常见,因为它比较短。对于可能失败的函数,最常用的用法是返回
结果,而不是
bool
。因此,如果您想在函数失败时惊慌失措,就不要断言
在它上面,您将
.unwrap()
结果。为什么不使用带前导下划线的变量:
让_ok=。。。;明确肯定(_ok),这将使警告静音。@MatthieuM。但在一半的编译中,您使用的是变量。当然,有很多方法可以让这个警告保持沉默,但我的观点更接近于“想想为什么你首先会有一个警告”。
assert!(my_function());