Rust LinkedList 第二个可变借用,同时将第一个项目移动到末尾

Rust LinkedList second mutable borrow while moving first item to the end

美好的一天! 我试图将第一项移动到链接列表的末尾。 我有一个这样的链表:

let mut list = LinkedList::new();
list.push_back('a');
list.push_back('b');
list.push_back('c');

如果我这样移动项目:

list.push_back(list.pop_front().unwrap());

Rust 会抛出“发生第二次可变借用”错误。

但是如果在另一行代码中获取第一项:

let str = list.pop_front().unwrap();
list.push_back(str);

那就好了

为什么这两段代码的行为不同?完全看不懂..

push_backpop_front 都是保持对列表的可变引用的方法,所以你不能这样做:

list.push_back(list.pop_front().unwrap());

按照您指出的其他方式进行操作是可行的,因为您在第一行末尾删除了可变引用:

let str = list.pop_front().unwrap(); // mutable reference dropped here, so it's fine to have another mutable reference afterwards
list.push_back(str);