有什么方法可以将方法中的 self 用作 Rc<RefCell<T>>?
Is there any way I could use self from a method as an Rc<RefCell<T>>?
我有一个具有 Rc<RefCell<Bar>>
字段的结构 (Foo),Bar 有一个由 Rc<RefCell<Bar>>
调用的方法,在该方法中它获得了对 Foo 的引用,我会喜欢将 Foo 中的 Rc<RefCell<Bar>>
设置为调用该方法的 Bar。
考虑以下代码:
struct Foo {
thing: Rc<RefCell<Bar>>,
}
struct Bar;
impl Foo {
pub fn set_thing(&mut self, thing: Rc<RefCell<Bar>>) {
self.thing = thing;
}
}
impl Bar {
pub fn something(&mut self) {
// Things happen, I get a &mut to a Foo, and here I would like to use this Bar reference
// as the argument needed in Foo::set_thing
}
}
// Somewhere else
// Bar::something is called from something like this:
let my_bar : Rc<RefCell<Bar>> = Rc::new(RefCell::new(Bar{}));
my_bar.borrow_mut().something();
// ^--- I'd like my_bar.clone() to be "thing" in the foo I get at Bar::something
我想向 Bar::something
添加另一个接受 Rc<RefCell<Bar>>
的参数是唯一的方法吗?当我已经从一个调用它时,它感觉很冗余。
pub fn something(&mut self, rcSelf: Rc<RefCell<Bar>>) {
foo.set_thing(rcSelf);
这里主要有两个选择:
使用静态方法:
impl Bar {
pub fn something(self_: Rc<RefCell<Bar>>) {
…
}
}
Bar::something(my_bar)
隐藏您正在使用 Rc<RefCell<X>>
的事实,将其包装在具有单个字段 Rc<RefCell<X>>
的新类型中;那么其他类型可以使用这个新类型而不是 Rc<RefCell<Bar>>
,你可以使这个 something
方法与 self
一起工作。这可能是也可能不是一个好主意,具体取决于您如何使用它。没有进一步的细节很难说。
我有一个具有 Rc<RefCell<Bar>>
字段的结构 (Foo),Bar 有一个由 Rc<RefCell<Bar>>
调用的方法,在该方法中它获得了对 Foo 的引用,我会喜欢将 Foo 中的 Rc<RefCell<Bar>>
设置为调用该方法的 Bar。
考虑以下代码:
struct Foo {
thing: Rc<RefCell<Bar>>,
}
struct Bar;
impl Foo {
pub fn set_thing(&mut self, thing: Rc<RefCell<Bar>>) {
self.thing = thing;
}
}
impl Bar {
pub fn something(&mut self) {
// Things happen, I get a &mut to a Foo, and here I would like to use this Bar reference
// as the argument needed in Foo::set_thing
}
}
// Somewhere else
// Bar::something is called from something like this:
let my_bar : Rc<RefCell<Bar>> = Rc::new(RefCell::new(Bar{}));
my_bar.borrow_mut().something();
// ^--- I'd like my_bar.clone() to be "thing" in the foo I get at Bar::something
我想向 Bar::something
添加另一个接受 Rc<RefCell<Bar>>
的参数是唯一的方法吗?当我已经从一个调用它时,它感觉很冗余。
pub fn something(&mut self, rcSelf: Rc<RefCell<Bar>>) {
foo.set_thing(rcSelf);
这里主要有两个选择:
使用静态方法:
impl Bar { pub fn something(self_: Rc<RefCell<Bar>>) { … } } Bar::something(my_bar)
隐藏您正在使用
Rc<RefCell<X>>
的事实,将其包装在具有单个字段Rc<RefCell<X>>
的新类型中;那么其他类型可以使用这个新类型而不是Rc<RefCell<Bar>>
,你可以使这个something
方法与self
一起工作。这可能是也可能不是一个好主意,具体取决于您如何使用它。没有进一步的细节很难说。