Muss ich eine explizite Übereinstimmungserklärung verwenden, um ihren Platzhalterwert zu identifizieren?Muss ich eine explizite Übereinstimmungserklärung verwenden, um ihren Platzhalterwert zu identifizieren?
Nehmen wir zum Beispiel die folgende Funktion:
let (|Positive|Neutral|Negative|) = function
| x when x > 0 -> Positive
| x when x = 0 -> Neutral
| x when x < 0 -> Negative
| _ -> failwith (sprintf "unknown: %d" _)
Fehler:
Unexpected symbol '_' in expression
ich gelernt, dass ich dies ohne Fehler tun können:
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)
UPDATE
Hier ist das Ergebnis aus einer Antwort geschrieben:
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)
Denken Sie an Strich als ignorieren/verwerfen. Es ist ein spezielles Symbol, dem nie ein Wert zugewiesen werden kann (außer vielleicht von einer anderen .NET-Sprache?) – TheQuickBrownFox
Es ist ein absolut gültiger Bezeichner für Variablen, Methoden usw. in C#. Diese besondere Bedeutung ist einzigartig für F #. (VB.NET lässt Sie offenbar auch nicht als Kennung verwenden, obwohl diese Art von Mustererkennung nicht vorhanden ist.) – TeaDrivenDev