- , bar Rc. , Rc, &mut . ; &mut & , ( ) "" .
use std::rc::Rc;
struct FooBuilder<'a> {
bar: &'a mut Rc<Bar>,
}
impl<'a> FooBuilder<'a> {
fn new(bar: &'a mut Rc<Bar>) -> Self {
FooBuilder { bar: bar }
}
fn f(mut self) -> Self {
Rc::get_mut(self.bar).unwrap().mut_method();
self
}
fn build(&'a self) -> Foo {
Foo { bar: self.bar.clone() }
}
}
struct Foo {
bar: Rc<Bar>,
}
struct Bar;
impl Bar {
fn bar(&self) {}
fn mut_method(&mut self) {}
}
fn main() {
let mut bar = Rc::new(Bar);
let foo = FooBuilder::new(&mut bar).f().build();
bar.bar();
}
Foo Rc, , mut (, , None Rc::get_mut()).
, ; FooBuilder Foo bar, , - , &mut T.
, , , , .