2016-04-07 16 views
0

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:

Unexpected symbol '_' in expression

ben herhangi bir hata olmadan bunu öğrendim

:

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) 
+1

düşünün. Asla bir değer atanmayan özel bir sembol (belki başka bir .NET dilinden başka?) – TheQuickBrownFox

+0

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

cevap

2

Bu değiştirebilirsiniz ve işe yarayacak:/Silme işlemini görmezden olarak alt çizgi

let (|Positive|Neutral|Negative|) = function 
    | x when x > 0 -> Positive 
    | x when x = 0 -> Neutral 
    | x when x < 0 -> Negative 
    | f   -> failwith (sprintf "unknown: %d" f) 
+0

Teşekkürler. Sadece joker karakteri tamamen kaldırabileceğimi ve sadece –

+0

numaralı telefonu kullanabileceğimi öğrendim. – kemiller2002

İlgili konular