Wie passt man sich selbst in einer Enum ab?

8

Ich habe ein enum:

%Vor%

Ich versuche eine Methode zu implementieren:

%Vor%

aber ich bekomme den folgenden Fehler:

%Vor%

Ohne den Stern bekomme ich auch einen Fehler:

%Vor%

Ich glaube, ich verstehe den ersten Fehler: Ich versuche mehr zu tun, als ich mit dem (unveränderlichen) geliehenen self tun darf, aber ich bin mir nicht wirklich sicher über den zweiten Fehler. Ich habe keine Ahnung, wie ich das richtig machen soll.

    
The Oddler 25.11.2015, 19:48
quelle

1 Antwort

11

Für die erste Frage müssen Sie das ref Schlüsselwort verwenden, wie von @Adrian:

gesagt %Vor%

Durch die Verwendung von ref wird verhindert, dass der Mustervergleich den Besitz von id übernimmt. Wie Sie erwähnen, dürfen Sie den Wert von id nicht aus dem Expr herausnehmen, da Sie nur eine unveränderliche Referenz haben. v , f und s haben dieses Problem nicht, weil sie u32 sind, was Copy . Anstatt den Wert herauszunehmen, werden sie kopiert und das Original an Ort und Stelle belassen.

Ich weiß nicht, was der Env oder Id Typ ist, oder die Definitionen von lookup und assign , also sind vielleicht einige clone() Aufrufe nicht notwendig.

Bei Ihrer zweiten Frage liegt das daran, dass self vom Typ &Expr ist, also müssen Sie & in die Muster einfügen:

%Vor%

Beide Formen der Übereinstimmung sind gleichwertig, aber *self ist idiomatischer und erfordert weniger Typisierung:)

    
antoyo 25.11.2015, 20:14
quelle

Tags und Links