将RefCell <&mut T>的内容传递给函数

Mor*_*hne 2 rust

在借用的RefCell<&mut T>(即a Ref<&mut T>)上调用方法可以按预期工作,但是我似乎无法将其传递给函数。考虑以下代码:

use std::cell::RefCell;

fn main() {
    let mut nums = vec![1, 2, 3];
    foo(&mut nums);
    println!("{:?}", nums);
}

fn foo(nums: &mut Vec<usize>) {
    let num_cell = RefCell::new(nums);

    num_cell.borrow_mut().push(4);

    push_5(*num_cell.borrow_mut());
}

fn push_5(nums: &mut Vec<usize>) {
    nums.push(4);
}
Run Code Online (Sandbox Code Playgroud)

num_cell.borrow_mut().push(4)可以,但是push_5(*num_cell.borrow_mut())出现以下错误:

use std::cell::RefCell;

fn main() {
    let mut nums = vec![1, 2, 3];
    foo(&mut nums);
    println!("{:?}", nums);
}

fn foo(nums: &mut Vec<usize>) {
    let num_cell = RefCell::new(nums);

    num_cell.borrow_mut().push(4);

    push_5(*num_cell.borrow_mut());
}

fn push_5(nums: &mut Vec<usize>) {
    nums.push(4);
}
Run Code Online (Sandbox Code Playgroud)

取消引用后Ref,我希望在内部获得可变引用,因此该错误对我而言实际上没有任何意义。是什么赋予了?

the*_*472 5

push_5(*num_cell.borrow_mut());

删除*和编译器建议

error[E0308]: mismatched types
  --> src/main.rs:14:12
   |
14 |     push_5(num_cell.borrow_mut());
   |            ^^^^^^^^^^^^^^^^^^^^^
   |            |
   |            expected mutable reference, found struct `std::cell::RefMut`
   |            help: consider mutably borrowing here: `&mut num_cell.borrow_mut()`
   |
   = note: expected type `&mut std::vec::Vec<usize>`
              found type `std::cell::RefMut<'_, &mut std::vec::Vec<usize>>`
Run Code Online (Sandbox Code Playgroud)

push_5(&mut num_cell.borrow_mut()); 编译。

push_5(num_cell.borrow_mut().as_mut()); 也是