例如下面这段伪代码
struct Parent {
Child1* child1;
Child2* child2;
}
struct Child1 {
Parent* parent;
void do_something() {
if (some_condition) {
parent.child2.do_something();
}
}
}
struct Child2 {
Parent* parent;
void do_something();
}
1
共 6 条评论, 1 页
评论区
写评论谢谢。
--
👇
pynixwang: ``` struct Parent { Child1* child1; Child2* child2; void do_something(){ child1.do_something() child2.do_something() }
}
struct Child1 {
}
struct Child2 {
}
把组合逻辑移动到组合字段的地方。算是单一职责原则吧。
调用的方法需要修改自己,以及其它的部分。所以需要
&mut self
--
👇
leslieDD: 这样算不算:
运行结果:
我其实是想问 rust 下,有没有 idiomatic 的设计模式可以避免使用 相互引用。
--
👇
viruscamp: 这是自引用结构哦, 基本上 unsafe 才可以创建, 你还要 Pin 住它.
safe 的情况下, 创建
Rc<RefCell<Parent>>
或者Arc<Mutex<Parent>>
, 然后内部的 Parent 指针要用Option<Weak<Parent>>
.这样算不算:
运行结果:
这是自引用结构哦, 基本上 unsafe 才可以创建, 你还要 Pin 住它.
safe 的情况下, 创建
Rc<RefCell<Parent>>
或者Arc<Mutex<Parent>>
, 然后内部的 Parent 指针要用Option<Weak<Parent>>
.