ワイルドカード値を特定するために明示的な一致ステートメントを使用する必要がありますか?明示的な一致ステートメントを使用してワイルドカード値を識別する必要がありますか?
はたとえば、次の関数を取る:
let (|Positive|Neutral|Negative|) = function
| x when x > 0 -> Positive
| x when x = 0 -> Neutral
| x when x < 0 -> Negative
| _ -> failwith (sprintf "unknown: %d" _)
エラー:
私はエラーなしでこれを行うことができますことを学んだUnexpected symbol '_' in expression
:
let (|Positive|Neutral|Negative|) v =
match v with
| x when x > 0 -> Positive
| x when x = 0 -> Neutral
| x when x < 0 -> Negative
| _ -> failwith (sprintf "unknown: %d" v)
更新
は、ここに掲載の答えからの結果だ:
はlet (|Positive|Neutral|Negative|) = function
| x when x > 0 -> Positive
| x when x = 0 -> Neutral
| x when x < 0 -> Negative
| x -> failwith (sprintf "unknown: %d" x)
と思います。それは決して値を割り当てられない特別なシンボルです(別の.NET言語を除いて) – TheQuickBrownFox
これはC#の変数、メソッドなどのための完全に有効な識別子です。この特別な意味はF#固有のものです。 (VB.NETは、この種のパターンマッチングをしていないにもかかわらず、識別子として使うことはできません。) – TeaDrivenDev