Probleme beim versuchten Caching ausräumen

8

Das folgende Code-Snippet macht die gleichen Dinge auf drei Arten.

%Vor%

show3 kompiliert nicht und gibt den folgenden Fehler aus:

%Vor%

Soweit ich es erzähle, handelt es sich bei dem Problem mit show3 nicht um Veränderbarkeit, sondern um einen doppelten Borgen: Das Borging von self wird an get_cached vergeben, das nicht endet, weil get_cached a zurückgibt Verweis auf etwas, das in self enthalten ist. Ist das überhaupt richtig?

Wie kann ich mein beabsichtigtes Ziel erreichen, einen Wert in einem veränderbaren Cache in self nachzuschlagen und den Verweis auf eine andere Methode von self zu übergeben?

    
porgarmingduod 07.08.2014, 18:55
quelle

2 Antworten

2

Rust kann im Moment nicht mit dieser Art von Caching umgehen.

Die beste Lösung besteht darin, das Problem vollständig zu vermeiden. Muss show_impl wirklich eine Methode von Foo sein? Wenn nicht, können Sie ein neues Merkmal definieren und für String implementieren. Zum Beispiel:

%Vor%

Rufen Sie dann show_impl in der Zeichenfolge self.get_cached(key).show_impl();

auf

Hier ist eine Lösung, die UnsafeCell verwendet. Ich bin mir nicht sicher, ob es richtig funktioniert. Während der Kompilierung, die Verwendung von unsicheren Code bedeutet, dass der Compiler keine Sicherheit mehr garantieren kann.

%Vor%     
A.B. 07.08.2014 19:14
quelle
0

Sie könnten versuchen, &mut auf self auf show_impl wie in

hinzuzufügen %Vor%

So wird es nicht gemischt.

    
Marco Aurelio 07.08.2014 19:07
quelle

Tags und Links