以下代码无法编译(playground):
#![allow(unused)]
use std::cell::RefCell;
enum Token {
A,
B,
}
struct Thing {
c: Token,
}
fn main() {
let a = RefCell::new(Thing { c: Token::A });
if let Token::A = a.borrow().c {
//Error!
}
}
由于以下错误而失败:
error[E0597]: `a` does not live long enough
--> src/main.rs:16:23
|
16 | if let Token::A = a.borrow().c {
| ^ borrowed value does not live long enough
...
19 | }
| - `a` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
如果我在语句后添加任何内容,即使是单个;
也可以正常工作:
if let Token::A = a.borrow().c {
}; // Ok
我认为这是因为if
的值被用作main
的返回值,因此if let
中的借用以某种方式扩展了。但这不应该发生,只是()
!还是我不了解的东西?
顺便说一句,同样的事情发生在:
match a.borrow().c {
_ => ()
}