今日、F#パターンマッチ構文で奇妙なことが起こりました。これは、排他性チェックの明らかな失敗につながります。パターンマッチング構文のあいまいさ
上記のシナリオでは、コンパイラは、2番目のルールが決してマッチしないと私に伝えます。しかし、コードを少しコンパクトにして書いてみたら、
let useThing =
function
| This | That -> "A"
| That | Other -> "B"
私はコンパイラの助けを借りていません。私はだと思うのは、は、| This -> "A" | That -> "A"
のショートカットではないが、それは非常によく似ている(と私はそれを扱うような多くのコードサンプルを見てきた)。代わりに、私が見つけることができるから、パイプシンボルは、個々のパターンを分離するために、またORパターンとしても使用されます。
これはほとんどのDUにとって大きな問題ではありませんが、大量のケースを含むDUを少数のケースで別のDUにマッピングするときに問題が発生しました。ショートカット構文を使用しようとしたところ、バグが発生しました。
だから私の質問は以下のとおりです。
- 正しい私の解釈ですか?
- 各パターンを別々の行に記載する以外に回避策はありますか?