gpt4 book ai didi

rust - 借用 Rc> 中的 T

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

我正在尝试做这样的事情

use std::cell::{RefCell,Ref,RefMut};
use std::rc::Rc;

struct Entity;

struct Tile {
entity: Option<Rc<RefCell<Entity>>>
}

impl Tile {
pub fn try_read_entity<'a>(&'a self) -> Option<Ref<'a, Entity>> {
self.entity.map(|e| e.borrow())
}
}

我遇到了与生命周期相关的错误,并且发现很难理解到底出了什么问题,或者是否可以这样做。

最佳答案

这是 Option::map() 的签名方法:

fn map<U, F>(self, f: F) -> Option<U>
where F: FnOnce(T) -> U

self意味着 map() 按值接受选项,也就是说,它使用它。特别是,它意味着将期权值(value)从原来的位置移出。但是您不能这样做,因为在您的代码中您使用了 self通过引用 - 你不能从引用中移出,这正是错误所在。

但是,您不需要使用该选项,您只需要对其包含的值的引用。还好,Option<T>提供方法,fn as_ref(&'a self) -> Option<&'a T> , 可用于获取对选项内部的引用。如果您只是在调用 map() 之前调用它,您的代码将起作用:

self.entity.as_ref().map(|e| e.borrow())

关于rust - 借用 Rc<RefCell<T>> 中的 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23892045/

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