2016-10-02 14 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 

這是不可能的。