Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.75 KB | None | 0 0
  1. #[derive(Debug)]
  2. enum List {
  3. Cons(Rc<RefCell<i32>>, Rc<List>), // Rcの中にさらにRefCellを入れ込む
  4. Nil,
  5. }
  6.  
  7. use List::{Cons, Nil};
  8. use std::rc::Rc; // 複数の所有者を持てる
  9. use std::cell::RefCell; // 不変扱いの値を変更できる
  10.  
  11. fn main() {
  12. let value = Rc::new(RefCell::new(5));
  13.  
  14. let a = Rc::new(Cons(Rc::clone(&value), Rc::new(Nil)));
  15.  
  16. let b = Cons(Rc::new(RefCell::new(6)), Rc::clone(&a)); // 複数の所有者に可変値を配る
  17. let c = Cons(Rc::new(RefCell::new(10)), Rc::clone(&a));
  18.  
  19. *value.borrow_mut() += 10; // 共有する値を変更
  20.  
  21. println!("a after = {:?}", a); // それぞれの値が変更されていることを確認
  22. println!("b after = {:?}", b);
  23. println!("c after = {:?}", c);
  24. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement