【发布时间】:2018-02-11 13:57:05
【问题描述】:
这是 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 的用途是什么?为什么检查不相等性还不够?
【问题讨论】:
-
看起来它正在评估表达式。
-
主要动机似乎是延长在 match 语句中创建的临时值的生命周期以生成 assert_eq!更有用的是,请参阅此提交:github.com/rust-lang/rust/commit/d3c831ba4a4 - 我没有回答,因为我无法解释为什么它有效(还)。请参阅此游乐场链接进行实验:play.rust-lang.org/…
标签: rust