2017-08-07 5 views
0

F#に不完全なパターンマッチを行うためのコード機能(コンパイラ機能ではない)が存在するのではないかと警告しています。"不完全なパターンマッチ"をエラーとして処理するコード属性

私はこれをケースバイケースで行う必要があります。コード内のいくつかの箇所では、不完全なパターンマッチが警告になりたいのですが、同じアセンブリ内の他の場所では、エラーにしたいと思います。したがって、をすべて処理するコンパイラフラグを設定するだけでは不十分ですCompile-time constraint for complete pattern matchが示唆するように、不完全なパターンはエラーとしてエラーに一致します。

これはおそらく、

type MyUnion = First | Second 

let foo x = 
    match x with 
    | First -> "hello" 
    // raises a compile-time warning 

let bar x = 
    [<AssertCompleteMatch>] 
    match x with 
    | First -> "hello" 
    // raises a compile-time error 

それとも、その属性が完了しているすべてのパターンは、特定のタイプと一致することを確認するタイプに適用されるようになります。

+4

これの背後にある理由をより詳しく説明できますか?一般的に、不完全なパターンマッチはこれまでには望んでいません。あなたが非常に頻繁にそれをしていることが分かった場合は、ドメインを正しくモデル化していない可能性があります。 –

+2

私は、フラグをオンにして、不完全な一致を持つすべての場所を修正することをお勧めします。 – mydogisbox

+0

このような "コード機能"がどのように見えるかわかりません。コンパイル時に何かが動作すると、*はコンパイラ機能です。 – TeaDrivenDev

答えて

3

あなたは警告25は、エラーとして扱われていて、その後、あなたが明示的にそれを無視したいファイルに

#nowarn "0025" 

を使用することができます。しかし、警告を無効にすることは、マッチスコープではなくファイルスコープである。それはあなたができる最高のものだと私は思います。

関連する問題