не может заимствовать `* self` как изменчивый более одного раза за раз - PullRequest
0 голосов
/ 06 июля 2018

Я не понимаю эту ошибку проверки заимствования:

pub fn wait_for_device(&mut self) -> RoxResult<hidapi::HidDevice> {
    let mut device = self.open_device();
    let start = time::Instant::now();
    while device.is_err() {
        device = self.open_device();
        if start.elapsed().as_secs() > 30 {
            return Err("Can't reconnect to device".to_owned());
        }
    }
    Ok(device.expect("Out of while so we should have a device"))
}

pub fn open_device(&mut self) -> RoxResult<hidapi::HidDevice> {
    let device_info = &self.list[0]; 
    if let Ok(device) = self.api.open(device_info.vendor_id, device_info.product_id) {
        self.current_device = Some(device_info.clone());
        Ok(device)
    } else {
        Err(format!(
            "Error opening device vip: {:x} pid: {:x}",
            device_info.vendor_id, device_info.product_id
        ))
    }
}

error[E0499]: cannot borrow `*self` as mutable more than once at a time
  --> src\usb.rs:64:22
   |
61 |         let mut device = self.open_device();
   |                          ---- first mutable borrow occurs here
...
64 |             device = self.open_device();
   |                      ^^^^ second mutable borrow occurs here
...
70 |     }
   |     - first borrow ends here

Я думал, что мое первое заимствование закончится в конце open_device, но, похоже, я ошибаюсь. Почему?

1 Ответ

0 голосов
/ 06 июля 2018

Переменные действительны до конца области, в которой они были объявлены. Вы создали переменную device и присвоили ей заимствованное значение в области действия всей функции. Другими словами, заимствование заканчивается в конце функции (как вы можете видеть в сообщении об ошибке компилятора).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...