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

时间:2016-10-02 17:49:21

标签: types rust dereference

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

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())

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

2 个答案:

答案 0 :(得分:10)

我认为你可能会误算运营商优先权。

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

答案 1 :(得分:3)

usize未实现Deref特征,因此您无法对其*应用write()Result<usize>返回unwrap(),因此当您*temp.write(data).unwrap() 并应用解除引用星号时:

*usize

您正在尝试

can_focus

哪种情况不可能。