我经常使用共享切片做这样的事情:
fn read_a_few_bytes(slice: &mut &[u8]) {
    dbg!(&slice[..3]);
    *slice = &slice[3..];
}
今天我注意到,当切片可变时,这种方法不起作用:
fn read_a_few_bytes(slice: &mut &mut [u8]) {
    dbg!(&slice[..3]);
    *slice = &mut slice[3..];
}
第二个例子给出了这个错误:
error: lifetime may not live long enough
 --> src/main.rs:3:5
  |
1 | fn read_a_few_bytes(slice: &mut &mut [u8]) {
  |                            -    - let's call the lifetime of this reference `'2`
  |                            |
  |                            let's call the lifetime of this reference `'1`
2 |     dbg!(&slice[..3]);
3 |     *slice = &mut slice[3..];
  |     ^^^^^^^^^^^^^^^^^^^^^^^^ assignment requires that `'1` must outlive `'2`
这是借用检查器的限制,还是我在这里尝试做的事情实际上是不合理的?有解决方法吗?
您可以使用std::mem::take来解决这个问题。
fn read_a_few_bytes(slice: &mut &mut [u8]) {
    let data = std::mem::take(slice);
    *slice = &mut data[3..];
}
| 归档时间: | 
 | 
| 查看次数: | 135 次 | 
| 最近记录: |