考虑以下情况:
fn main() {
let mut count = 0;
let mut inc = || {
count += 1;
println!("`count`: {}", count);
};
inc();
// let _reborrow = &count; ERROR
inc();
}
字符串
如果我不删除注解掉的行
let _reborrow = &count;
型
编译器会说:不能将count
作为不可变的对象借用,因为它也是作为可变对象借用的。
为什么编译器不会认为我在inc()
之后释放了对count
的可变引用,然后在用let _reborrow = &count
行获取对count
的不可变引用之后立即释放了它,然后用inc()
再次获取对count
的不可变引用?
我想对上面的问题得到一个解释,如果遵循上面的想法,那么上面的代码将编译[不注解那一行],而下面的情况将导致编译错误:
fn main() {
let mut count = 0;
let mut inc = || {
count += 1;
println!("`count`: {}", count);
};
inc();
let _reborrow = &count;
inc();
println!("{}", _reborrow);
}
型
1条答案
按热度按时间8i9zcol21#
然后用
inc()
再次获取对count
的不可变引用?具体怎么做呢?你如何与闭包通信以获取引用?
闭包必须为自己保留引用,因为没有人可以给它一个副本。记住闭包可以是未知的,例如从函数返回,然后没有办法“暂停”和“恢复”它对引用的所有权。