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_back
和 pop_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);
美好的一天! 我试图将第一项移动到链接列表的末尾。 我有一个这样的链表:
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_back
和 pop_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);