如何清空 RefMut<&mut [u8]> 中的切片?

Eva*_*rad 0 rust

如果我想正常“清空”切片,我可以这样做:

let mut data: &[u8] = &[1, 2, 3];
data = &[];
Run Code Online (Sandbox Code Playgroud)

但我正在使用一个返回 a 的库RefMut<&mut [u8]>,如果我尝试以相同的方式重置它:

let mut data: RefMut<&mut [u8]> = account.data.borrow_mut();
data = &[];
Run Code Online (Sandbox Code Playgroud)

我被告知我需要:

expected struct `RefMut`, found `&[_; 0]`
Run Code Online (Sandbox Code Playgroud)

我尝试这样的事情:

expected struct `RefMut`, found `&[_; 0]`
Run Code Online (Sandbox Code Playgroud)

但随后 c 在仍借用的情况下被丢弃。我是否以错误的方式处理这个问题?

Bal*_*Ben 6

您可以使用取消引用运算符写回RefCell.

let refcell: RefCell<&[u8]> = RefCell::new(&[1, 2, 3]);
{
    let mut data = refcell.borrow_mut();
    *data = &[];
    // or equivalently, *refcell.borrow_mut() = &[];
}
println!("{:?}", refcell); // RefCell { value: [] }
Run Code Online (Sandbox Code Playgroud)