`iflet`如果中间值不运行析构函数
考虑两个语义等效的代码段:
let x = Mutex::new(0);
if *x.lock().unwrap() == 0 {
*x.lock().unwrap() = 1;
}
let x = Mutex::new(0);
if let 0 = *x.lock().unwrap() {
*x.lock().unwrap() = 1;
}
第一个按预期运行,而第二个则死锁。为什么守卫析构函数被运行if而不是被运行if let?在哪里可以找到有关此行为的文档?