は、以下のナンセンスラムダを考えてみましょう:F#のパターンマッチング風変わり
function
| [] -> "Empty list"
| hd::tl -> "Not so empty list"
これが正常に動作します。
function
| [] -> "Empty list"
| hd::tl & l -> "Not so empty list"
を再びナンセンスな理由のために、(と私はas
代わりの&
を使用して同じ効果を得ることができることを知っているが、これはすべてのコード・ゴルフ問題に関係しています。今、次のように私はそれを書き換えますこの質問には関係しません)。今度はF#コンパイラが私に教えてくれます:
警告FS0025:不完全なパターンがこの式にマッチします。 の例の場合、値 '[]'は、 パターンでカバーされていないケースを示している可能性があります。
これは意味をなさない - 私は最初のルールで[]
のケースを明示的に処理しています。私は[]
に関して最初の機能から2番目の機能に変わったものは見ません。いずれの関数の第2の規則もそれに適合していないが、第2の関数だけが警告を与える。私がしたのは、何でもと一致するパターンを追加しただけです。
もちろん、空のリストで2番目の関数を呼び出すことは成功します。
この警告が発生した正当な理由はありますか、F#パターンの検証にはいくつかの単純な違いがありますか?より高度なパターンを採用すると、このようなケースがいくつか見受けられますが、これはかなり基本的なもののようです。問題が一般的には解決できない場合でも、この種のケースはコンパイラで特別な処理を行うのに十分なほど一般的なようです。
このように '&'が使われたことはありません。あなたはそれが何をしているかに関するいくつかの文書にリンクすることができますか? – JaredPar
@JaredPar - ここでANDパターンを参照してください。http://msdn.microsoft.com/en-us/library/dd547125.aspx基本的には頭、尾、リスト全体を一つにまとめることができることを意味します。 –