2010-12-11 22 views
23

Was ist der beste Weg in F # zu schreiben, wenn nicht Bedingung?F # wenn nicht Bedingung

Im Moment ist ich es so schreiben:

if condition <> true then do 

Gibt es einen anderen kürzeren Weg, es zu schreiben? Wie mit dem! Operator?

+0

Duplizieren: http://stackoverflow.com/questions/239888/logical-negation-operator-in-f-äquivalent – Orbling

+0

Entschuldigung für das Duplikat. Ich habe das nicht gesehen, als ich gesucht habe. –

+0

Das ist in Ordnung, es ist eine wichtige Frage, wegen des Vorbehaltes in meiner Antwort, ein bisschen eine Falle für diejenigen, die sich ''' '' nicht bewusst sind. – Orbling

Antwort

19

In Ocaml, können Sie das "nicht" Schlüsselwort:

if not condition then ... 

Hoffentlich auch mit F # funktioniert.

+3

+1: yep, funktioniert in F #. Surround-Bedingungen mit Parens nach Bedarf. – Juliet

+0

Es tut. Seien Sie vorsichtig mit der Priorität des Operators. –

+0

AH! Ich habe das früher versucht, aber ich konnte den Fehler, den es mir erzählte, nicht verstehen. Jetzt funktioniert es gut mit dem Schlüsselwort nicht. Vielen Dank! –

-14

Ich weiß nicht F #, aber in C, mit der! Betreiber würde ich schreiben:

if(!condition) { ... } 

, die gleich ist wie

if(condition == false) { ... } 
+4

'!' Ist Operator, um den Wert einer Referenzzelle in F # zu erhalten. Sie brauchen die 'Nicht'-Funktion. –

+1

@Tomas Petricek, begann ich mit "Ich weiß nicht F #". Ich sah, dass er tat, wenn Bedingung <> dann wahr ... so vermutete er "vielleicht weiß er nicht, dass er Bedingung negieren kann und dasselbe Ergebnis erhält" – BlackBear

+1

Guter Punkt, obwohl ich denke, dass es mit einer Änderung tun könnte, um es reichlich zu machen klar. – Orbling

23

wenn man bedenkt, dass nicht auch eine Funktion, dann Rohr Sie können Ihren Zustand hinein Klammer zu vermeiden, wie so:

if not <| condition param1 param2 then ... 

Grund dafür ist, wenn Ihr Zustand Funktion Argumente übernimmt, die Sie nicht brauchen

not (condition param1 param2) 

zu tun, es ist wahrscheinlich ein wenig sauberer ihm die erste Art und Weise zu tun, da es f # scheint zugunsten von Rohren anstelle von Klammern für Operator Vorrang.

+0

Wow! Danke für den Tipp dazu. Ich hatte keine Ahnung, dass du das Rohr dazu benutzen könntest. –

+0

Ich liebe das, 'wenn nicht <| condition param1 param2 then ... 'passt gut in F # 's Kürze, da beide einfach getippt, gelesen und modifiziert werden können. Klammern sind so OO ;-) – TaterJuice