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.
Für die erste Frage müssen Sie das ref
Schlüsselwort verwenden, wie von @Adrian:
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:
Beide Formen der Übereinstimmung sind gleichwertig, aber *self
ist idiomatischer und erfordert weniger Typisierung:)
Tags und Links enums rust pattern-matching