std::rc::Rc<T> と std::cell::RefCell<T>
Rc::borrow_mut の問題
let file = File::open("text.txt")?; let mut bufreader = BufReader::new(&file); let shared_reader = Rc::new(bufreader); // NG let _ = *shared_reader.borrow_mut().read_line(&mut line)?; /* error[E0599]: no method named `borrow_mut` found for struct `Rc<BufReader<&File>>` in the current scope 15 | let _ = *shared_reader.borrow_mut().read_line(&mut line)?; | ^^^^^^^^^^ method not found in `Rc<BufReader<&File>>` */
直接Rc<T>
にイミュータブルなFile
インスタンスを包んでしまうと、borrow_mut
メソッドが使用できない。
RefCell に包む
let refcell = RefCell::new(bufreader); let shared_reader = Rc::new(refcell); // OK let _ = (*shared_reader.borrow_mut()).read_line(&mut line)?;