2016-05-22 3 views

Antwort

3

Sie kann nicht Überladung Zuweisung. Das Verschieben einer Variablen von einem Ort zu einem anderen ist eine Kernkomponente der Eigentumssemantik von Rust und nicht übersteuerbar.

Eine andere Antwort schlägt vor, dass Sie das Merkmal Copy benutzerdefiniert implementieren. Das macht keinen Sinn, da there's nothing to implement:

pub trait Copy: Clone { } 

Sie Clone für einen Typ implementieren könnte, aber clone haben Sie es zu verwenden explizit zu nennen: noch

let foo = bar.clone(); 

Die tatsächliche Zuordnung nur das Kopieren Bits von der rechten Seite auf der linken Seite, der einzige Unterschied ist, dass Sie das Eigentum von bar nicht aufgeben.


Wenn Ihre Art kann durch einfaches Kopieren Bits dupliziert werden, dann ist es sinnvoll Copy zu implementieren. Wenn durch Ausführen einer Art von Funktion dupliziert werden kann, ist es sinnvoll, Clone zu implementieren. Es gibt keine Möglichkeit, implizit Code bei einer bestimmten Zuweisung eines Typs auszuführen (und ich zähle das als gute Sache).

+0

Ich merkte, mein Verständnis von Rust Zuordnung war falsch, wie ich in meiner Frage gesagt habe, kam ich in Rust mit C++ zurück. (Das macht meistens Verwirrung.) –

0

FALSCHE ANTWORT

Wie gesagt, war ich verwirrt: D. Die Antwort auf meine Frage ist, die Copy und Clone Merkmale abzuleiten. Ich muss nur

#[derive(Clone, Copy)] 

über meine Typdefinition hinzufügen; Auf diese Weise kann ich meine gewünschte Funktionalität erhalten.

Für eine benutzerdefinierte Logik zum Zuweisen und Kopieren können Sie einfach Copy und Clone selbst implementieren, anstatt Ableitung zu verwenden.

+0

Wie hängt das mit Ihrer Frage zusammen? Dies hat nichts mit dem "Überladen des Zuweisungsoperators" zu tun. –

+0

@VictorPolevoy Was genau wollen? –

+0

Sie haben nach dem "Überladungszuweisungsoperator" gefragt, der '=' ist. Das bedeutet, dass Sie wissen möchten, wie Sie während der Zuweisung eine benutzerdefinierte Logik erstellen können. Das Ableiten von 'Clone'- und' Copy'-Merkmalen überlädt nichts und in dieser Antwort gibt es nichts, was mit dem 'Überladen des Zuweisungsoperators' zu tun hat. Einfach habe ich solche Informationen im Internet gesucht und diese Frage gefunden. Ich war sehr aufgeregt, aber deine Antwort ist wirklich nutzlos. –

Verwandte Themen