Ich habe einen Code-Block, in dem mehrere optionale Variablen gleichzeitig zugewiesen werden müssen. Es besteht nur eine sehr geringe Wahrscheinlichkeit, dass einer der Werte None
ist. Daher ist es nicht besonders nützlich, jeden einzelnen fehlgeschlagenen Fall individuell zu behandeln.
Momentan schreibe ich die Schecks so:
%Vor%Es wäre praktisch, wenn es möglich wäre, Zuordnungen zu gruppieren. Ohne dies fügt das Hinzufügen einer neuen Variablen den Block um eine Ebene ein, was für verrauschte Diffs sorgt und eine unnötig tiefe Einrückung verursacht:
%Vor% Gibt es eine Möglichkeit, mehrere Option
s in einer if-Anweisung zuzuweisen?
Einige bemerkenswerte Details:
Die erste Funktion, die fehlschlägt, sollte kurzgeschlossen werden und nicht die anderen anrufen. Sonst könnte es so geschrieben werden:
%Vor%Tiefe Einrückung könnte mit einer Funktion vermieden werden, aber ich würde dies lieber nicht tun, da Sie den Körper vielleicht nicht in einem anderen Bereich haben möchten ...
%Vor%Wie @SplittyDev sagte, können Sie ein Makro erstellen, um die gewünschte Funktionalität zu erhalten. Hier ist eine alternative makrobasierte Lösung, die auch das Kurzschlussverhalten beibehält:
%Vor%Die Standardbibliothek enthält nicht genau diese Funktionalität, aber die Sprache ermöglicht es Ihnen, das gewünschte Verhalten mit einem kleinen Makro zu erstellen.
Folgendes habe ich mir ausgedacht:
%Vor% Sie können all Ihre Optionen füttern und ein Tupel mit den unverpackten Werten erhalten, wenn alle Werte Some
oder None
sind, falls eine der Optionen None
ist.
Im Folgenden finden Sie ein kurzes Beispiel für die Verwendung:
%Vor%Hier ist eine vollständige Testsuite für das Makro: Rust Playground
Meine erste Neigung war, etwas zu tun, das der Antwort von swizard ähnlich ist, aber um es in eine Eigenschaft zu verpacken, um das zu machen Verkettung Reiniger. Es ist auch ein bisschen einfacher ohne die Notwendigkeit für zusätzliche Funktionsaufrufe.
Es hat den Nachteil, die Verschachtelung der Tupel zu erhöhen.
%Vor%Tags und Links rust variable-assignment