繁体   English   中英

在Rc中借用T <RefCell<T> &gt;

[英]Borrowing the T in a Rc<RefCell<T>>

我正在尝试做这样的事情

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() 按值接受选项,即使用它。 特别是,这意味着将期权价值从其先前位置移出。 但是您不能这样做,因为在您的代码中您是通过引用来获取self的-您不能从引用中移出,而这正是错误所在。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM