`assert_eq!(a, b)` 和 `assert_eq!(a, b, )` 之间有区别吗?

sav*_*ava 2 rust

assert_eq!(a, b, )在几个地方看到过,我不太习惯使用宏来assert_eq!(a, b)通过查看代码来区分它们。有人可以解释一下两者之间是否有区别吗?

Sil*_*olo 6

Rust 允许在很多地方使用尾随逗号,并且大多数内置宏也遵守这个约定。这两个assert_eq!调用没有区别。类似地,我们可以像这样声明一个结构体

struct Example {
  foo: i32,
  bar: i32, // Note: trailing comma on this line
}
Run Code Online (Sandbox Code Playgroud)

通常,如果调用是单行,则尾随逗号没有任何用处。所以我会觉得这很奇怪,但完全有效

assert_eq!(a, b, )
Run Code Online (Sandbox Code Playgroud)

另一方面,如果这两个表达式足够复杂,可以独立成行,则有助于 git diffs 和可读性。我发现以下非常地道

assert_eq!(
  some_complicated_expression(arg1, arg2, arg3),
  some_complicated_expression(argA, argB, argC),
)
Run Code Online (Sandbox Code Playgroud)