首页 > 解决方案 > 如何将数组的可变引用传递给函数?

问题描述

我认为在这种情况下,我的引用需要是可变的,因为我正在对数组进行排序,并且它需要是一个引用,因为我想使用相同的向量来计算平均值和众数。我尝试mut了函数签名和变量声明中的各种组合,但无法编译(包括错误消息中的建议,但可能执行不正确)。

我正在尝试实现一个简单的中值函数(我知道可能有一种内置方式,但我将其作为练习)

fn main() {
    let mut v = vec![1, 2, 3, 4, 5, 5, 4, 3];
    println!("{}", median(&v));
}

fn median(mut vec: &Vec<i32>) -> usize {
    vec.sort();
    let len: usize = vec.len();
    let middle = len as i32 / 2;
    println!("{}", &middle);
    0
}

这给出了以下错误

error[E0596]: cannot borrow `*vec` as mutable, as it is behind a `&` reference
 --> src/main.rs:7:5
  |
6 | fn median(mut vec: &Vec<i32>) -> usize {
  |                    --------- help: consider changing this to be a mutable reference: `&mut std::vec::Vec<i32>`
7 |     vec.sort();
  |     ^^^ `vec` is a `&` reference, so the data it refers to cannot be borrowed as mutable

标签: referencerustmutable

解决方案


推荐阅读