在Rust中引用包含结构(并在其上调用方法)

 ghost 发布于 2023-01-31 08:17

我正在尝试在Rust中编写一个容器结构,其中元素也存储对包含容器的引用,以便它们可以在其上调用方法.据我所知,我需要做到这一点Rc>.它是否正确?

到目前为止,我有以下内容:

struct Container {
  elems: ~[~Element]
}

impl Container {
  pub fn poke(&mut self) {
    println!("Got poked.");
  }
}

struct Element {
  datum: int,
  container: Weak>
}

impl Element {
  pub fn poke_container(&mut self) {
    let c1 = self.container.upgrade().unwrap(); // Option
    let mut c2 = c1.borrow().borrow_mut(); // &RefCell
    c2.get().poke();
//    self.container.upgrade().unwrap().borrow().borrow_mut().get().poke();
//    -> Error: Borrowed value does not live long enough * 2
  }
}

fn main() {
  let container = Rc::new(RefCell::new(Container{ elems: ~[] }));
  let mut elem1 = Element{ datum: 1, container: container.downgrade() };
  let mut elem2 = Element{ datum: 2, container: container.downgrade() };
  elem1.poke_container();
}

我觉得我在这里错过了一些东西.访问的内容Rc>真的很难(在poke_container)?或者我是以错误的方式解决问题的?

最后,并假设的做法是正确的,我怎么会写add的方法Container,以便它可以在填写container领域Element(假设我改变了场为类型Option>>?我不能创建另一个Rc&mut self据我所知.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有