Я пытаюсь создать сеть узлов в Rust, где я хочу, чтобы каждый узел в сети знал о каждом другом подключенном узле. Я думал, что это можно сделать со слабыми Rc
, например так:
use std::cell::Cell;
use std::cell::RefCell;
use std::rc::Rc;
use std::rc::Weak;
struct Node {
name: String,
known_nodes: Rc<RefCell<Vec<Weak<Node>>>>,
}
impl Node {
fn connect_to_network(&mut self) {
self.known_nodes
.borrow_mut()
.push(Rc::downgrade(&Rc::new(*self)));
}
}
fn main() {
let known_nodes = Rc::new(RefCell::new(Vec::new()));
let node_one = Node {
name: "node1",
known_nodes: known_nodes.copy(),
};
node_one.connect_to_network();
let node_two = Node {
name: "node2",
known_nodes: known_nodes.copy(),
};
node_two.connect_to_network();
}
Однако это дает
не может выйти из заимствованного контента
at:
self.known_senders.borrow_mut().push(Rc::downgrade(&Rc::new(*self)));
Поскольку *self
удалено из заимствованного контента в &Rc::new(*self)
. Любые идеи о том, как каждый узел может отслеживать все остальные узлы в сети?