gpt4 book ai didi

rust - `if` 条件仍然借用在正文中

转载 作者:行者123 更新时间:2023-11-29 07:50:53 25 4
gpt4 key购买 nike

<分区>

我刚刚在 Rust (1.12) 中发现了一些我无法解释的行为。我有一个使用 RefCell<Option<i32>> 实现延迟加载的结构以及访问数据的函数:

struct Foo {
data: RefCell<Option<i32>>
}

impl Foo {
fn get_data(&self) -> i32 {
if self.data.borrow().is_none() { // <--- (a)
let d = 1337;
self.data.borrow_mut() = Some(d); // <--- (b)
d
} else {
self.data.borrow().unwrap()
}
}
}

这会编译但会产生运行时错误:RefCell提示在尝试 borrow_mut 时借用已经激活在线 (b)。但是,如果我将 if 语句更改为以下内容,则不会出现此问题:

let is_none = self.data.borrow().is_none();
if is_none {

问题:为什么 (a) 行的 if 条件中的借位在 if 语句的主体内仍然有效?不应该调用 is_none()导致借用结束,因为我只坚持 bool之后,而不是借来的值(value)?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com