在Rust中比较元组

7d7tgy0s  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(132)

我正在为一个函数写一个测试用例,这个函数返回一个包含枚举的元组。我想验证返回的元组是否与我所期望的匹配。
在Rust中如何比较由枚举组成的元组?以下代码无法编译:

enum Test {
  Foo,
  Bar
}
assert_eq!((1, Test::Foo), (1, Test::Foo));

(Of当然,其中一个元组是由一个方法在运行时生成的。)

jtw3ybtb

jtw3ybtb1#

元组已经实现了PartialEqDebug(如果它们的所有元素都实现了的话),但是对于自定义枚举,您缺少DebugPartialEq的实现:

#[derive(Debug, PartialEq)]
enum Test {
  Foo,
  Bar
}

这样,您期望的assert_eq!((1, Test::Foo), (1, Test::Foo));就可以工作了。
如果你不能实现任何一个trait,你可以使用matches!(<value>, <pattern>)

let got = (1, Test::Foo); // calculate your result
assert!(matches!(got, (1, Test::Foo)))

注意,第二个参数<pattern>必须是pattern,因此必须在编译时已知(您对函数的调用需要作为第一个参数传递)。

相关问题