【发布时间】:2021-09-28 04:04:15
【问题描述】:
在将应用程序从 Python 移植到 Rust 时,我遇到了这个问题。
如果我们有这样的类:
class Backend:
def __init__(self, result_consumer=None):
self.result_consumer = ResultConsumer(self, ..)
class ResultConsumer:
def __init__(self, backend=None):
self.backend=backend
ResultConsumer 经常调用像 self.backend.method() 这样的方法,而 Backend 也在调用像 self.result_consumer.method() 这样的方法。
在 Rust 中,你不能只使用结构字段来建立这种关系。
我尝试了一种使用泛型的方法(因为 ResultConsumer 应该支持多个后端)
struct ResultConsumer<B: Backend> {
backend: Arc<B>,
}
struct Backend {
result_consumer: ResultConsumer<Self>
}
在 Rust 中表示这种关系的最惯用的方式是什么?我的示例方法可行吗?
我特别问,因为当它编译时,我无法弄清楚如何在构建 result_consumer 字段中为 Backend 填充 ResultConsumer。
【问题讨论】:
-
使用
Rc或者避免这种模式
标签: rust