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

标签 rust

在借来的 RefCell<&mut T> 上调用方法(即 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);
}

num_cell.borrow_mut().push(4)有效,但是 push_5(*num_cell.borrow_mut())错误:

error[E0389]: cannot borrow data mutably in a `&` reference
  --> src/main.rs:14:12
   |
14 |     push_5(*num_cell.borrow_mut());
   |            ^^^^^^^^^^^^^^^^^^^^^^ assignment into an immutable reference

取消引用 Ref 后,我希望在内部获得可变引用,所以这个错误对我来说真的没有意义。给了什么?

最佳答案

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>>`

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

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

关于rust - 将 RefCell<&mut T> 的内容传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49841847/

相关文章:

macros - tt 元变量类型在 Rust 宏中意味着什么?

rust - 为什么放弃这个 SpawnHandle 不会取消它的 future ?

rust - 如何基于作为参数传递的闭包的返回类型来更改函数的行为?

rust - extrinsics 选项卡中没有可用的 `kitties` 模块

rust :使用未声明的类型名称 `io::IOResult`

rust - 引用字段调用回调

rust - 如何同时获取对两个数组元素的可变引用?

rust - 为什么我可以调用闭包两次,即使我已经将一个变量移入其中?

types - 我如何在 Rust 中打印变量的类型?

module - 将结构移动到一个单独的文件而不拆分成一个单独的模块?