我希望Handler下面的内容将自己推入列表中
use std::vec::Vec;
use std::rc::Rc;
use std::cell::RefCell;
struct Handler<'a> {
list: Rc<RefCell<Vec<&'a mut Handler<'a>>>>
}
impl<'a> Handler<'a> {
fn new(list: Rc<RefCell<Vec<&'a mut Handler<'a>>>>) -> Self {
Handler { list: list }
}
fn push(&mut self) {
self.list.borrow_mut().push(self)
}
}
fn main() {
let list = Rc::new(RefCell::new(Vec::new()));
let mut h1 = Handler::new(list);
let mut h2 = Handler::new(list);
h1.push();
h2.push();
// Here the list should contain both h1 and h2
}
Run Code Online (Sandbox Code Playgroud)
但我遇到了这个错误,但我找不到解决方法!
use std::vec::Vec;
use std::rc::Rc;
use std::cell::RefCell;
struct Handler<'a> {
list: Rc<RefCell<Vec<&'a mut Handler<'a>>>>
}
impl<'a> Handler<'a> {
fn new(list: Rc<RefCell<Vec<&'a mut Handler<'a>>>>) -> Self {
Handler { list: list }
}
fn push(&mut self) {
self.list.borrow_mut().push(self)
}
}
fn main() {
let list = Rc::new(RefCell::new(Vec::new()));
let mut h1 = Handler::new(list);
let mut h2 = Handler::new(list);
h1.push();
h2.push();
// Here the list should contain both h1 and h2
}
Run Code Online (Sandbox Code Playgroud)
什么是“匿名生命周期#1”以及如何以正确的方式定义它?或者甚至,我的方法在 Rust 中解决这个问题是否正确?
\n\n\n什么是“匿名生命周期#1”
\n
“无名”是指没有名字的事物。生命周期是与引用相关的事物。第 14 行的参考文献在哪里?
\n\nfn push(&mut self)\n// ^ here\nRun Code Online (Sandbox Code Playgroud)\n\n由于生命周期省略,您不必具有显式生命周期,从而允许它是隐式的(和匿名的)。
\n\n您的代码要求Veccontains &\'a mut Handler<\'a>,但您试图放入&mut Handler<\'a>\xe2\x80\x94 引用的生命周期与生命周期没有已知的关系\'a。该错误告诉您这是无效的。您可以通过关联生命周期来修复此错误:
fn push(&\'a mut self)\nRun Code Online (Sandbox Code Playgroud)\n\n然而,这并不能修复整个程序。
\n\n您的特定代码结构可能永远不会按照您希望的方式工作。您希望有一个对处理程序的引用列表,这些处理程序本身包含对处理程序的引用,并且所有这些都需要具有完全相同的生命周期。但是,您随后声明列表和处理程序都存在不同的持续时间,因为它们是单独声明的。
\n\n我不知道为什么您想要显示的结构,但如果我需要它,我可能会切换到Rc处理程序而不是&mut.
| 归档时间: |
|
| 查看次数: |
5079 次 |
| 最近记录: |