2015-05-09 51 views
3

其中request是从System.Net.Http 0123',我试图使用模式匹配来确定使用哪种方法来提出请求。如何在F#中的HttpMethod模式匹配?

这是这证明了我的问题一个人为的例子:

let m = match request.Method with 
     | HttpMethod.Get -> "GET" 
     | HttpMethod.Post -> "POST" 

这导致:

分析器错误:该字段,构造或元件 '获取' 未定义

为什么这不起作用,我该如何使用模式匹配或更合适的技术来achi前进的目标是相同的吗?

+4

像'|的东西当t = HttpMethod.Get'时,t才能工作。这是必需的,因为'Get'不是一个文字 –

回答

6

正如约翰·帕尔默在他的评论中指出的那样,你可以写这样的:

let m = 
    match request.Method with 
    | x when x = HttpMethod.Get -> "GET" 
    | x when x = HttpMethod.Post -> "POST" 
    | _ -> "" 

但是,如果你要反复这样做,你可能会觉得这有点麻烦,其中情况下,你可以定义一些Active Patterns它:

let (|GET|_|) x = 
    if x = HttpMethod.Get 
    then Some x 
    else None 

let (|POST|_|) x = 
    if x = HttpMethod.Post 
    then Some x 
    else None 

这将使你写这篇文章:

let m = 
    match request.Method with 
    | GET _ -> "GET" 
    | POST _ -> "POST" 
    | _ -> ""