【发布时间】:2022-08-20 09:04:43
【问题描述】:
你可以这样做:
impl Foo {
fn foo(self: &Rc<Self>) {}
}
但不是这个:
impl Foo {
fn foo(self: &Rc<RefCell<Self>>) {}
}
前者非常有用 - 例如我可以让方法返回包含对self 的弱引用的对象。但是因为我不能使用RefCell,所以我不能返回任何会改变self 的东西。
有一些方法可以解决这个问题(例如,在内部将整个结构包装在 RefCell 中),但对于我当前的任务来说,没有一个比允许 self: &Rc<RefCell<>> 更方便。
允许的语法描述为here。它允许Box、Rc、Arc 和Pin,但不允许RefCell。为什么?
-
您是在问“为什么没有完成”,在这种情况下,这应该以基于意见的方式关闭,还是“rustc 如何知道它是不允许的”或类似的问题,在这种情况下,您应该澄清?
-
这是一个unstable feature,每晚工作。不过,目前似乎没有太多工作要做。
-
@isaactfa It still does not allow
RefCell。据我记得,它只跟踪原始指针作为自我类型并定义你自己的类型。 -
我认为没有可以引用的官方答案。我能想到的最好的是
RefCell不是指针类型,因此它不适合self。因此我想关闭它(我不能单独关闭一个问题,只有在其他人同意的情况下)。 -
Pin被认为是一个智能指针(它甚至暗示了Deref[Mut])。
标签: rust