gpt4 book ai didi

rust - Rust从可变的 self 功能中调用可变的 self 功能

转载 作者:行者123 更新时间:2023-12-03 11:45:08 24 4
gpt4 key购买 nike

在下面的示例中,我想为每个spin调用smol_socket_handle,而这只是一个usize

pub fn spin_all(&mut self) -> u8 {
for (smol_socket_handle, _) in self.smol_sockets.iter_mut() {
self.spin(smol_socket_handle.clone());
}
0
}
pub fn spin(&mut self, smol_socket_handle: usize) -> u8 {
问题是我借用了可变的 self两次。一次调用 spin_all,再次调用 spin。我绝对需要 spin来处理 &mut self。如何使 spin_all多次调用 spin以获得可变的 self
更新:
所以,如果我理解正确,
    for (smol_socket_handle, smol_socket) in self.smol_sockets.iter_mut() {
self.spin(smol_socket_handle.clone());
}
扩展成
{
//borrows self mutably
let mut _iter = std::iter::IntoIterator::into_iter(self.smol_sockets.iter_mut());
loop {
match _iter.next() {
Some(loop_variable) => {
//tries to borrow self mutably again while it's still borrowed into `_iter`
self.spin(loop_variable.clone());
},
None => break,
}
}
}

最佳答案

The problem is that I borrow self as mutable twice. Once when spin_all is called, and once again when we call spin.


不,那不是问题。 spin_all的可变 &mut selfspin重用,不存在冲突(实际上,否则它将不起作用,因为 self.spin会尝试从不可变的借项创建可变的借项,这会失败)。
问题是您要为 self.smol_sockets.iter_mut()创建一个可变借项,并为 self.spin()创建一个单独且重叠的借项。
您应该通过像Aloso所说的那样克隆可迭代套接字来避免在可迭代套接字上进行借用,或者为 spin赋予可迭代对象一个索引/键,以便它在内部进行借用。

关于rust - Rust从可变的 self 功能中调用可变的 self 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63025313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com