15

私はこの単純な F# 関数を持っています:

let compareNum x =
    let y = 10
    match x with
    | _ when x = y -> 0
    | _ when x > y -> 1
    | _ when x < y -> -1

ただし、F# コンパイラでは、「この式のパターン マッチが不完全です」という警告が表示されます。この場合、すべてのケースがすべてのパターンをカバーする必要があります。

Chris Smith 著の『Programming F#』の第 1 版の「パターン マッチング」セクションにも同様の例があります。F# の新しいバージョンでは何かが変更される可能性がありますか?

4

1 に答える 1

19

前の質問への回答(およびコメント-- 「一般に、最後のパターンで when ガードを使用するのはアンチ パターンです」 -- kimskによる) が状況を説明していると思います。

ただし、最後のパターンでガードを使用することがアンチパターンであるとは言いません。これは最も簡単な回避策ですが、whenパターンは期待できる値に関する有用な情報を提供するため、これはやや残念です。プログラムの理解が容易になります。前回この問題が発生したとき、少なくともコメントとして残しました。

let compareNum x =
  let y = 10
  match x with
  | _ when x = y -> 0
  | _ when x > y -> 1
  | _ (*when x < y*) -> -1
于 2013-09-09T05:52:37.587 に答える