【发布时间】:2021-05-03 06:34:07
【问题描述】:
循环:
impl State {
pub fn exec(&mut self) -> Vec<(&[u8], SocketAddr)> {
vec!()
}
}
fn main_loop(mut state: State) {
let mut packets = Vec::<(&[u8], SocketAddr)>::new();
loop {
let new = state.exec();
packets.extend(new);
}
}
给出错误:
error[E0499]: cannot borrow `state` as mutable more than once at a time
--> src/main.rs:93:14
|
93 | let new = state.exec();
| ^^^^^ `state` was mutably borrowed here in the previous iteration of the loop
但是,如果我注释掉 packets.extend(new); 行,则没有错误。
我认为问题在于返回的向量归state 所有,就好像在循环迭代之前删除了new,这很好。如果可以修复返回的向量,我很高兴能够复制它。
我预计将.clone() 添加到new 或state.exec() 会修复它,但它没有。
有没有简单的方法来解决这个问题?
或者我是否需要以不同的方式构建单线程应用程序状态?
【问题讨论】:
-
您可以尝试返回对向量的引用吗?
-
@mousetail 我认为任何由可变状态方法返回的引用都会停止循环编译。我是否理解正确?
-
exec需要带&mut self吗?你能不能有两个单独的方法,一个做突变,一个返回切片,后者采用&self?
标签: rust borrow-checker