Gibt es eine Möglichkeit, eine Bindung freizugeben, bevor sie ihren Gültigkeitsbereich verlässt?

8

Ich versuche, eine Datei mit Regex zu analysieren:

%Vor%

... aber der Compiler beschwert sich, weil die Methode RegEx captures() einen Kredit hat, der für die Lebenszeit des Matches besteht:

%Vor%

Bis ich zu line.clear(); komme, bin ich mit dem Match fertig und möchte den Puffer löschen und zur nächsten Zeile in der Datei ohne weitere Verarbeitung gehen. Gibt es eine gute / saubere / elegante / idiomatische Lösung oder muss ich nur in den sauren Apfel beißen und einen nachfolgenden 'if'-Block einführen?

    
steamer25 11.01.2017, 21:42
quelle

1 Antwort

7

Kurze Antwort: Nein.

  

Ich bin fertig mit dem Match

Das mag sein, aber der Compiler weiß das nicht. Insbesondere sind die Lebenszeiten an den lexikalischen Bereich gebunden, in dem sie definiert sind. Die magische Funktion, nach der Sie suchen, heißt nicht-lexikalische Lebenszeiten . Es existiert jetzt nicht, aber viele Menschen würden es lieben.

Als ein Beispiel:

%Vor%

Ein Programmierer kann sagen, dass wir mit matched fertig sind, nachdem wir ihn gedruckt haben, aber der Compiler sagt, dass der Borg bis zum schließenden } dauert. Die Lösung besteht darin, einen Bereich einzuführen:

%Vor%

Ihr Fall ist heimtückischer, da die Entscheidung, die Saite zu löschen, mit dem Wert des Borgs der Saite selbst verwoben ist. So etwas wäre meine erste Anlaufstelle:

%Vor%

Allerdings könnte Ihr spezifischer Fall transformiert werden, um mehrere if / if let -Anweisungen zu vermeiden:

%Vor%

Was nicht schlecht aussehen würde, wenn Sie einen neuen Typ und / oder eine neue Methode einführen würden. Als Bonus gibt es einen Platz für das Regex , um zu leben:

%Vor%     
Shepmaster 11.01.2017, 22:24
quelle

Tags und Links