类型`usize`不能被解除引用

Jos*_*ars 2 types dereference rust

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

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,
};
Run Code Online (Sandbox Code Playgroud)

现在我得到的错误如下:

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

出于某种原因,我无法理解我做错了什么,因为借用/生命周期对我来说仍然是一个新事物.

Fra*_*gné 10

我想你可能会让运算符优先级错误.

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

  • Rust编译器通常不会立即报告所有错误; 修复错误经常会出现其他错误.试着找出如何修复新错误,如果你仍然无法解决,请[问一个新问题](http://stackoverflow.com/questions/ask). (8认同)

lje*_*drz 5

usize没有实现该Deref特征,因此您无法应用*它。write()返回 a Result<usize>,因此当您使用unwrap()它并应用解引用星号时:

*temp.write(data).unwrap()
Run Code Online (Sandbox Code Playgroud)

你正在尝试做

*usize
Run Code Online (Sandbox Code Playgroud)

这是不可能的。