Ich lese die Dokumentation für Deref
Merkmal des Rust:Warum ist der Rückgabetyp von Deref :: deref selbst eine Referenz?
pub trait Deref {
type Target: ?Sized;
fn deref(&self) -> &Self::Target;
}
Die Art Signatur für die deref
Funktion erscheint unlogisch zu mir; Warum ist der Rückgabetyp eine Referenz? Wenn Referenzen dieses Merkmal so implementieren, dass es dereferenziert werden kann, welchen Effekt hätte das überhaupt?
Die einzige Erklärung, die ich finden kann, ist, dass Referenzen Deref
nicht implementieren, aber als "primitiv dereferenziert" gelten. Wie aber würde eine polymorphe Funktion, die für irgendein dereferenzierbarer Typ funktionieren würde, einschließlich sowohl Deref<T>
als auch &T
, geschrieben werden?
Das könnte Sie interessieren https://www.reddit.com/r/rust/comments/2umad5/the_output_of_the_index_trait_should_be_a_value/ –
@JonasTepe Also, wenn ich das richtig zu verstehen, ist der Grund dafür, dass wir keine Funktionen angeben, die lvalues zurückkehren , also machen wir es "manuell", indem wir einen Verweis auf einen L-Wert, den wir bereits haben, zurückgeben. – corazza
Sie möchten den "richtigen" L-Wert zurückgeben. Bezeichnet den Wert, der Eigenname ist (der Wert, der von Deref implementiert wird). Du würdest keinen kurzlebigen Wert zurückgeben wollen.Dann könntest du genauso gut einen rvalue zurückgeben. Und der einzige Weg, dies zu tun, ist eine Referenz in sich selbst zu bringen. –