无法取消引用类型 `usize`

Type `usize` cannot be dereferenced

我有一些代码看起来有点像下面这样:

let incoming: Vec<u8> = Vec::new();

match some_function(|data| {
    let temp = &mut incoming;
    Ok(*temp.write(data).unwrap())
}) {
    Ok(v) => v,
    Err(err) => return false,
};

现在我得到的错误如下:

error: type `usize` cannot be dereferenced
   --> src/stripe_connection.rs:127:16
     |
 127 |             Ok(*temp.write(data).unwrap())

出于某种原因,我无法理解我做错了什么,因为 borrowing/lifecycle 对我来说仍然很陌生。

usize doesn't implement the Deref 特征,所以你不能对它应用 *write() returns a Result<usize>,所以当你 unwrap() 它并应用取消引用星号时:

*temp.write(data).unwrap()

您正在尝试

*usize

这是不可能的。

我认为您可能弄错了运算符优先级。

*temp.write(data).unwrap() 等同于 *(temp.write(data).unwrap()),而不是 (*temp).write(data).unwrap()。您可以编写后者,但这是不必要的,因为编译器会自动取消引用方法调用主题中的指针(即 x.f(..) 中的 x)。所以你应该在这里完全删除 *