我经常使用共享切片做这样的事情:
fn read_a_few_bytes(slice: &mut &[u8]) {
dbg!(&slice[..3]);
*slice = &slice[3..];
}
Run Code Online (Sandbox Code Playgroud)
今天我注意到,当切片可变时,这种方法不起作用:
fn read_a_few_bytes(slice: &mut &mut [u8]) {
dbg!(&slice[..3]);
*slice = &mut slice[3..];
}
Run Code Online (Sandbox Code Playgroud)
第二个例子给出了这个错误:
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`
Run Code Online (Sandbox Code Playgroud)
这是借用检查器的限制,还是我在这里尝试做的事情实际上是不合理的?有解决方法吗?
您可以使用std::mem::take来解决这个问题。
fn read_a_few_bytes(slice: &mut &mut [u8]) {
let data = std::mem::take(slice);
*slice = &mut data[3..];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |