почему DerefMut не реализован для `std :: cell :: RefMut <'_, [..]>`, который заключает в себе FnMut? - PullRequest
1 голос
/ 21 января 2020

Я хочу обернуть FnMut замыкание в RefCell следующим образом:

fn borrow_mut_closure() {
    let mut temp = 3i32;
    let cl = RefCell::new(move || {
        temp += 1;
        println!("{}", temp);
    });
    cl.borrow_mut()();
}

Но, к моему удивлению, компилятор сообщает:

cannot borrow data in a dereference of `std::cell::RefMut<'_, [closure@src/main.rs:17:25: 20:4 temp:i32]>` as mutable

cannot borrow as mutable

help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `std::cell::RefMut<'_, [closure@src/main.rs:17:25: 20:4 temp:i32]>`rustc(E0596)

Но почему не реализовано для этого? Как я мог преодолеть это?

1 Ответ

1 голос
/ 21 января 2020

Это похоже на ошибку компилятора. Кажется, что это может быть та же самая проблема, о которой здесь сообщают: Невозможно заимствовать как изменяемый, несмотря на DerefMut .

Ваш код будет работать, если вы измените

cl.borrow_mut()();

вместо этого на

(&mut *cl.borrow_mut())();

для явного разыменования значения как изменяемого перед его вызовом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...