Joker karakter değerini belirlemek için açık bir eşleşme ifadesi kullanmalı mıyım?Joker karakter değerini tanımlamak için açık bir eşleşme ifadesi kullanmak zorunda mıyım?
Örneğin, aşağıdaki işlevi atın:
let (|Positive|Neutral|Negative|) = function
| x when x > 0 -> Positive
| x when x = 0 -> Neutral
| x when x < 0 -> Negative
| _ -> failwith (sprintf "unknown: %d" _)
Hata:
ben herhangi bir hata olmadan bunu öğrendimUnexpected 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)
UPDATE
İşte yayınlanmıştır cevabını sonucudur:
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)
düşünün. Asla bir değer atanmayan özel bir sembol (belki başka bir .NET dilinden başka?) – TheQuickBrownFox
Bu, C# içindeki değişkenler, yöntemler vb. Için mükemmel bir geçerli tanımlayıcıdır. Bu özel anlam F # için benzersizdir. (VB.NET, görünüşte bu tür bir desen eşleşmesine sahip olmamasına rağmen, bir tanımlayıcı olarak kullanmanıza izin vermez.) – TeaDrivenDev