Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #[derive(Debug)]
- struct Data(i32);
- struct Stuff {
- a: Data,
- }
- impl Stuff {
- fn mutator(&mut self) -> Mutator {
- Mutator { stuff: self }
- }
- fn get(&self) -> &Data {
- &self.a
- }
- }
- struct Mutator<'s> {
- stuff: &'s mut Stuff,
- }
- impl<'s> Mutator<'s> {
- fn set_get(&mut self, value: Data) -> &Data {
- (*self.stuff).a = value;
- &self.stuff.a
- }
- }
- fn main() {
- let mut stuff = Stuff { a: Data(0) };
- // In teoria il riferimento a Data è valido anche
- // oltre il lifetime di Mutator, perché è agganciato
- // al lifetime di Stuff, ma come glielo spiego?
- fn update(stuff: &mut Stuff) -> &Data {
- let mut mutator = stuff.mutator();
- mutator.set_get(Data(1));
- stuff.get()
- };
- let data = update(&mut stuff);
- println!("{:?}", data);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement