2010-12-11 15 views
23

F#でif not条件を書く最も良い方法は何ですか?F#条件でない場合

今私はこのようにそれを書いている:

if condition <> true then do 

はそれを書くために、他の短い方法はありますか? !と同じように!オペレーター?

if not condition then ... 

願わくばは、F#のとあまりにも動作します:

+0

重複:http://stackoverflow.com/questions/239888/logical-negation-operator-in-f-equivalent – Orbling

+0

重複して申し訳ありません。私が探しているとき、私はこれを見ませんでした。 –

+0

それは大丈夫です、それは私の答えの警告のために、重要な質問です、 '<> 'を認識していない人のための落とし穴のビット。 – Orbling

答えて

19

OCamlでは、あなたは "ない" キーワードを使用することができます。

+3

+1:うん、F#で動作します。必要に応じて括弧で条件を囲みます。 – Juliet

+0

です。オペレータの優先順位に注意してください。 –

+0

AH!私はこれを以前に試みたが、それは私に言っていたエラーを理解することに失敗した。今は、キーワードnotを使ってうまくいきます。本当にありがとう! –

-14

私はF#を知りませんが、Cでは!私が書きたいオペレータ:

if(!condition) { ... } 

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

'!'はF#の参照セルの値を取得する演算子です。 'not'関数が必要です。 –

+1

@Tomas Petricek、私は "私はF#を知らない"と始めました。私は彼が条件をtrueにしたのを見たので...だから私は "彼が条件を否定して同じ結果を得ることができないかもしれないと思ったかもしれない"と推測しました – BlackBear

+1

良い点ですが、私はそれを豊富に明らかです。 – Orbling

6

と同じでありnot functionはあるが、それは唯一のboolean型の変数で動作します。

だからあなたが言うことができます:

if (not condition) then do 

しかし、それは、Cスタイルの言語のように、他のタイプでは動作しません。

!はまだF#の演算子であるため、偶然使用しないでください。dereference on a mutable reference cellです。

full operator documentationを参照してください。

23

あなたも機能ではないことを考慮した場合、その後、あなたはそれにパイプあなたの条件にすることができますので、同様に括弧を避けるために:ビーイングは、あなたの条件関数は引数を取る場合、あなたは必要としないで

if not <| condition param1 param2 then ... 

理由

not (condition param1 param2) 

を行うには、それはF#は、演算子の優先順位のためのパイプの賛成の代わりに、括弧内にあると思われるので、それを最初の方法を行うために少しクリーナーは、おそらくです。

+0

うわー!これについてのヒントをありがとう。私はあなたがこれを行うのにパイプを使うことができるとは考えていませんでした。 –

+0

私はこれが大好きです。 condition param1 param2 then ... 'は簡単に型指定され、読み込まれ、変更されるので、F#の簡潔さによく合います。かっこは大変です;-) – TaterJuice

関連する問題