- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 Rust 的 assert_eq!
macro implementation .为了简洁起见,我只复制了第一个分支:
macro_rules! assert_eq {
($left:expr, $right:expr) => ({
match (&$left, &$right) {
(left_val, right_val) => {
if !(*left_val == *right_val) {
panic!(r#"assertion failed: `(left == right)`
left: `{:?}`,
right: `{:?}`"#, left_val, right_val)
}
}
}
});
}
这里match
的目的是什么?为什么不检查不相等性还不够?
最佳答案
好吧,让我们删除匹配项。
macro_rules! assert_eq_2 {
($left:expr, $right:expr) => ({
if !($left == $right) {
panic!(r#"assertion failed: `(left == right)`
left: `{:?}`,
right: `{:?}`"#, $left, $right)
}
});
}
现在,让我们选择一个完全随机的例子......
fn really_complex_fn() -> i32 {
// Hit the disk, send some network requests,
// and mine some bitcoin, then...
return 1;
}
assert_eq_2!(really_complex_fn(), 1);
这将扩展为...
{
if !(really_complex_fn() == 1) {
panic!(r#"assertion failed: `(left == right)`
left: `{:?}`,
right: `{:?}`"#, really_complex_fn(), 1)
}
}
如您所见,我们调用了函数两次。这不太理想,如果每次调用函数的结果都可能发生变化,则更是如此。
match
只是一种快速、简单的方法,可以对宏的两个“参数”求值一次,并将它们绑定(bind)到变量名。
关于rust - 为什么 Rust 的 assert_eq!使用匹配实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48732263/
我在几个地方看到了 assert_eq!(a, b, ),我不太习惯用宏来区分 assert_eq!(a, b) 通过查看代码。谁能解释一下两者之间是否有区别? 最佳答案 Rust 允许在很多地方使用
我正在将 LEDDriver 的一些 C 测试代码重写为 Rust。 struct LEDDriver { address: &'a mut u32, } impl LEDDriver {
我已经编写了一些测试,其中我需要断言两个数组相等。一些数组是 [u8; 48] 而其他的是[u8; 188]: #[test] fn mul() { let mut t1: [u8; 48]
我已经编写了一些测试,其中我需要断言两个数组相等。一些数组是 [u8; 48] 而其他的是[u8; 188]: #[test] fn mul() { let mut t1: [u8; 48]
我有一个类,假设它名为 Foo,我没有在其中定义相等运算符,我也不想定义一个(出于我自己的原因)。 我想测试一些操作 Foo 的函数,我写了下面的代码: inline bool operator==(
我正在为语言分词器编写一些测试,并将分词器生成的分词的 JSON 序列化版本与已知良好分词的序列化进行比较。所以我有一些这样的测试: #[test] fn test_tokenize() {
我在我的代码中使用了新的通用转换特征,但体验到的人体工学效果有所下降。有问题的代码实现了 AsRef for [Ascii]正如您在示例中所见。 现在我想使用 v.as_ref()在assert_eq
这是 Rust 的 assert_eq! macro implementation .为了简洁起见,我只复制了第一个分支: macro_rules! assert_eq { ($left:ex
我有一个自定义聚合模板类型,我正尝试使用 gtest 对其进行测试。我正在使用 TYPED_TEST_P,并测试各种类型。它工作正常,直到我尝试做 boolean 类型。我收到以下“错误” error
我正在使用最新的 gtest。以下代码编译失败: Error_code rc = some_function(); ASSERT_EQ(OK, rc); Error_code 是一个枚举类型定义: t
assert!(a == b) 比 assert_eq!(a, b) 占用更少的字符,而且在我看来,它更具可读性。 错误信息大致相同: thread 'main' panicked at 'asser
我是一名优秀的程序员,十分优秀!