Referenz mehrmals von Option & mut T lesen

8

Ich habe Option<&mut T> und möchte mehrmals auf die enthaltene Referenz zugreifen:

%Vor%

Das funktioniert nicht, weil if let Some(x) = a den Referenzwert aus der Option entfernt und der zweite if let Some(x) = a einen Compilerfehler zur Folge hat. Ohne das zweite if let ... funktioniert das einwandfrei, also muss a nicht veränderbar sein.

Folgendes:

%Vor%

gibt einen Fehler: "Zuweisung in eine unveränderliche Referenz".

Das würde funktionieren:

%Vor%

Das mut a ist notwendig, sonst bekomme ich einen Fehler "kann das unveränderliche anonyme Feld (a:std::prelude::v1::Some).0 als veränderbar nicht ausleihen". Aber das fühlt sich falsch an: a sollte nicht veränderbar sein, weil ich es nicht modifiziere (siehe oben).

Was ist die richtige Lösung?

Bearbeiten 1

Mein Problem unterscheidet sich von dem in Wie man 'Option & lt; & amp; mut ... & gt;' zu mehreren Funktionsaufrufen, ohne Bewegungsfehler zu verursachen? . Ich möchte den Verweis mehrmals in Option<&mut T> dereferenzieren, während der andere einen Option an mehrere Funktionsaufrufe übergeben möchte. Die Lösungen für die andere Frage sind nicht auf meine Situation anwendbar.

    
Adrian Willenbücher 18.02.2017, 21:12
quelle

1 Antwort

4

Was ist damit?

%Vor%

In diesem Fall muss a nicht änderbar sein.

Das &mut ref mut fühlt sich ein wenig peinlich an, aber es macht Sinn: Zuerst entfernen wir eine &mut durch Destrukturierung und nehmen dann wieder eine veränderbare Referenz auf den Wert. Es ist offensichtlicher, wenn wir Option nicht verwenden:

%Vor%

Das funktioniert auch. Die dritte (spezielle) Zeile entspricht:

%Vor%

Im Fall Option können wir nicht die &mut *X -Version verwenden, sondern müssen alles innerhalb des Musters tun. Also die &mut ref mut x .

    
Lukas Kalbertodt 18.02.2017, 23:35
quelle

Tags und Links