2016-10-02 60 views
2

我有一些代码,看起来有点像下面这样:类型`usize`无法提领

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

对于一些原因我无法理解我做错了什么,因为借款/生命周期对我来说还是很新的。

回答

10

我想你可能会得到运算符的优先顺序错误。

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

+0

我已经更新了我的问题,因为我试图删除'*',但这会导致另一个错误。 –

+7

Rust编译器通常不会立即报告所有错误;修复错误经常会导致其他错误开始出现。尝试找出如何解决新的错误,如果你仍然无法弄清楚,请[问一个新问题](http://stackoverflow.com/questions/ask)。 –

2

usize没有实现Deref特性,所以你不能将*应用于它。 write()返回Result<usize>,所以当你unwrap()并申请解除引用星号:

*temp.write(data).unwrap() 

您正在尝试做

*usize 

这是不可能的。