Der Condvar
docs zeigt ein Beispiel, das die folgenden Leistungen enthält:Wann sollte "&" auf beiden Seiten einer Zuweisung verwendet werden?
let pair = Arc::new((Mutex::new(false), Condvar::new()));
// <snipped for brevity>
let &(ref lock, ref cvar) = &*pair;
Ich frage mich, was der Vorteil &
auf beiden Seiten dieser Zuordnung zu einschließlich sein könnte. Mit anderen Worten, warum nicht einfach schreiben:
let (ref lock, ref cvar) = *pair;
Beide Versionen kompilieren; Gibt es irgendeinen semantischen Unterschied? Und wenn nicht, gibt es einen Grund, die Syntax zu bevorzugen, die im Beispiel erscheint?
Im Allgemeinen, Ich bin immer noch kämpfen zu verstehen, wann/wo &*
sollte idiomatisch in Rust Code erscheinen. Mein Instinkt besteht darin, diese Zeichenkombination als No-Op zu sehen (zu lesen), obwohl ich weiß, dass dies wegen Rusts Deref
Semantik nicht der Fall ist.
Lassen Sie mich hinzufügen, dass ich das Design Absicht zu verstehen/Denken hinter Deref Verhalten https://github.com/rust-lang/rfcs/blob/master/text/0241-deref-conversions.md am nützlichsten gefunden haben . – Bosh