tgoop.com/rust_code/929
Create:
Last Update:
Last Update:
🧠 Задача на Rust — для продвинутых разработчиков
use std::cell::RefCell;
use std::rc::Rc;
fn main() {
let a = Rc::new(RefCell::new(1));
let b = a.clone();
let c = {
let mut val = b.borrow_mut();
*val += 1;
Rc::try_unwrap(b).ok().unwrap().into_inner()
};
println!("a: {}", a.borrow());
println!("c: {}", c);
}
Что выведет код?
A.
a: 2
c: 2
B.
a: 1
c: 2
C.
Panic at runtime due to unwrap failure ✅
D.
Compilation error due to ownership rules
📌 Ответ:
Почему:
Мы создаем a как Rc<RefCell<i32>>, из него делаем b = a.clone() → теперь у Rc два владельца.
Мы мутируем значение через b.borrow_mut(), увеличиваем его на 1.
Затем пытаемся сделать Rc::try_unwrap(b).
⚠️ Rc::try_unwrap требует, чтобы Rc был единственным владельцем. Но у нас всё ещё есть a, то есть ссылка остаётся → unwrap не срабатывает и unwrap() вызывает паник на runtime.
@rust_code
BY Rust
Share with your friend now:
tgoop.com/rust_code/929