2016-10-02 1 views
2

ich einen Code haben, die etwa wie folgt aussieht:Typ `usize` nicht dereferenziert werden kann

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, 
}; 

Nun ist die Störung, die ich bin immer ist die folgende:

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

Für einige Grund, warum ich nicht verstehen kann, was ich falsch mache, da das Ausleihen/der Lebenszyklus für mich noch sehr neu ist.

Antwort

10

Ich denke, Sie erhalten möglicherweise die Betreibervorrang falsch.

*temp.write(data).unwrap() entspricht *(temp.write(data).unwrap()), nicht (*temp).write(data).unwrap(). Sie könnten Letzteres schreiben, aber es ist unnötig, weil der Compiler Zeiger im Thema eines Methodenaufrufs automatisch dereferenziert (d. H. x in x.f(..)). Sie sollten also einfach die * hier entfernen.

+0

Ich habe meine Frage aktualisiert, als ich versuchte, das '*' zu entfernen, aber das führt zu einem anderen Fehler. –

+7

Der Rust-Compiler wird normalerweise nicht alle Fehler sofort melden; Es ist häufig, dass durch das Beheben eines Fehlers andere Fehler auftreten. Versuchen Sie herauszufinden, wie Sie die neuen Fehler beheben können, und wenn Sie es immer noch nicht herausfinden können, [bitte eine neue Frage stellen] (http://stackoverflow.com/questions/ask). –

2

usize implementiert nicht die Deref Eigenschaft, so dass Sie nicht * darauf anwenden können. write() gibt einen Result<usize>, also wenn Sie unwrap() es und den dereferenzierenden Sternchen gelten:

*temp.write(data).unwrap() 

Sie versuchen

*usize 

zu tun, was nicht möglich ist.

Verwandte Themen