2016-05-05 9 views
0

Zum Beispiel:Ist ein if-let oder ein normaler if-Zustand besser?

fn foo() -> Option<()> { 
    // ... 
} 

fn bar() -> Option<()> { 
    if let None = foo() { // <---- here 
     return None; 
    } 
} 

Dann änderte ich die if-Anweisung:

if None == foo() 

und es funktioniert auch.

Ist es in Ordnung, a == b anstelle von if let a = b zu verwenden?

+2

Ich nehme es in der Regel nur 'if let' zu verwenden, wenn ich etwas zuweisen/destrukturiere, also könnte ich schreiben, wenn Some (ch) = sc.next() ...' da ich 'ch' bekomme daraus, aber nicht 'wenn lassen Sie keine = foo (sc)'. –

Antwort

2

Echoend und expandierend auf Magnus Hoff's point, verwende ich nur if let, wenn ich mich um den Wert kümmert, der gegen verglichen wird. In diesem Beispiel würde ich so etwas wie Option::is_none weiter zu markieren verwenden, dass ich interessiere mich nicht:

Dies hat den kleinen Vorteil, dass die Voraussetzung für die eingewickelt T ausweicht PartialEq, wie fjh points out zu implementieren.

In meiner Erfahrung jedoch, diese insbesondere Konstrukt ist selten zu sehen, weil Sie in der Regel etwas im Some Fall tun wollen. Sobald Sie mehrere Zweige haben, aktualisiere ich auf eine match Anweisung.

+1

Ich glaube, du hast diesen ersten Satz falsch geschrieben: "benutze nur' wenn lass', wenn mir der Wert egal ist "; du wolltest wahrscheinlich "wenn es mich interessiert" schreiben, oder? – jPlatte

+0

@jPlatte haha, ja, danke * peinlich *. – Shepmaster

2

Also meine Fragen ist: Ist es in Ordnung mit a == b statt wenn a = b?

Ja, das ist absolut in Ordnung.

Eine Sache zu beachten ist allerdings, dass die Erstere wird nur kompilieren, wenn Sie auf irgendeine Art arbeiten Option<T> wo TPartialEq implementiert, während die letzteren unabhängig arbeiten. Dies liegt daran, dass Option<T> nur PartialEq implementiert, wenn TPartialEq implementiert.

Verwandte Themen