通过引用更改数组的内容

问题描述 投票:0回答:2

我最近一直在处理以下场景:

pub fn random_function(inp_array: &[u32]) {

    for actual_val in (RefCell::new(*inp_array)).iter_mut() {
        // change actual_val to e.g., constant number so that it's reflected in inp_array
    }

给定一个将对不可变 u32 数组的引用作为输入的函数,我试图通过智能指针更改其内容。我对内部可变性概念还是有点陌生;上面的片段有以下问题:

error[E0277]: the size for values of type `[u32]` cannot be known at compilation time
error[E0599]: no method named `iter_mut` found for struct `RefCell` in the current scope

我不完全确定这里的正确模式是什么。有任何想法吗?谢谢!

rust smart-pointers refcell
2个回答
0
投票
  • “将对不可变 u32 的引用作为输入”
  • “试图改变它的内容”

这两个说法是不相容的。没有

unsafe
,你不能改变对不可变变量的引用。即便如此,它也是不健全的

如果你的函数需要修改

inp_array
中的值,它必须把它当作一个
&mut [u32]
.

你当然可以为此目的使用内部可变性,但是类型必须是


您不能更改共享引用背后的任何内容,除非它
已经
&RefCell
中(例如通过
&Mutex

)。您最想要的版本是采用可变引用:

0
投票
Rc<RefCell>

如果你想使用内部可变性,你想改变的部分必须包装在一个已经支持它的结构中。所以你可以采取Arc<Mutex>

UnsafeCell

    


© www.soinside.com 2019 - 2024. All rights reserved.