Machen Sie es anders herum:
impl Widget {
fn op(mut self, rhs: Widget) -> Self {
self.update(rhs);
self
}
fn update(&mut self, rhs: Widget) {
// Some stuff
}
}
Sie können nicht aus einem geliehenen Zeiger bewegen, weil das Bewegen der Quelle unbrauchbar macht, aber da Sie die Quelle nicht tun besitzen, würden diese Informationen haben, propagieren zurück zum Besitzer, und Rust unterstützt das nicht.
Sie könnten sagen "aber ich gebe *self
einen neuen Wert, bevor die Funktion zurückgibt!". Das Problem dabei ist, dass *self
, wenn zwischen dem Verschieben und der Zuweisung eine Panik herrscht, immer noch kein gültiger Wert übrig wäre. Dies ist besonders problematisch, wenn das Fallenlassen von self
kein No-Op ist (obwohl es Rust egal ist, ob das Fallenlassen ein No-Op ist oder nicht).
nehme ich nicht oder wollen nicht zu können (da diese eine wesentlich andere Konstruktion erfordert und es gibt keinen praktischen Grund, warum die andere Art und Weise shouldn‘ t funktionieren genauso gut). – dspyz
Das ist ein guter Punkt. Ich habe nicht darüber nachgedacht, was passiert, wenn Panik entsteht. – dspyz