rust 不能借用为不可变(循环内),因为它也是作为可变借用的

pn9klfpd  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在研究代码出现后的生 rust 问题,我遇到了一个我无法解决的问题。
一般来说,我理解stack1被借用为可变的问题(因为pop),我想在print_stack中使用不可变的。
如果我想打印stacks的状态,那么我应该如何做呢?
抱歉,如果这只是一个愚蠢的问题,但我真的卡住了。我试过克隆这个物体,但没有成功。

fn print_stack(stacks: &Vec<Vec<usize>>) -> () {
    // some logic to print the stacks.
    // for now use just println!
    println!("{:?}", stacks);
}

fn main() {
    let mut stacks: Vec<Vec<usize>> = vec![vec![], vec![1,2,3,4]];
    let stack1 = stacks.get_mut(1).unwrap();
    
    while let Some(item) = stack1.pop() {
      // something with item
      // i would like to print every step.
      print_stack(&stacks);
    }
}

playground

s3fp2yjn

s3fp2yjn1#

在循环期间保持stack1的borrow使得不可能获取对&stacks的第二个引用,因为&mut引用是唯一的。解决这个问题的一种方法是在每次迭代时获取新的stacks[1],这样在print_stack调用期间就不会有借用。

let mut stacks: Vec<Vec<usize>> = vec![vec![], vec![1,2,3,4]];

while let Some(item) = stacks[1].pop() {
    // something with item
    // i would like to print every step.
    print_stack(&stacks);
}

相关问题