【问题标题】:Vec mutability mismatch after collect收集后 Vec 可变性不匹配
【发布时间】:2020-04-20 04:13:21
【问题描述】:

我有以下:

fn main() {
    let foo = vec![];
    let mut bar = vec![1, 2].iter().map(|a| a + 1).collect::<Vec<_>>();
    foo.append(&bar);
}

当我运行代码 sn-p 时,Rust 抱怨 bar 不可变:

error[E0308]: mismatched types
 --> src/main.rs:4:16
  |
4 |     foo.append(&bar);
  |                ^^^^ types differ in mutability
  |
  = note: expected mutable reference `&mut std::vec::Vec<_>`
                     found reference `&std::vec::Vec<_>`

据我了解,我需要对我尝试附加的Vec 进行可变引用,因为Vec::append 的类型签名是:

fn append(&mut self, other: &mut Vec<T>)

但是,在我看来,bar 应该根据提供的关键字是可变的。

是否可以在调用collect 之后追加?这是怎么回事?

【问题讨论】:

    标签: rust


    【解决方案1】:

    bar 确实是可变的,但在下一行中,它不可变&amp;bar 借用。您可以通过编写来修复此错误

    foo.append(&mut bar);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多