f# - 如何在 F# 中对 HttpMethod 进行模式匹配?

标签 f# pattern-matching

request 是来自 System.Net.HttpHttpRequestMessage,我正在尝试使用模式匹配来确定使用了哪种方法提出请求。

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

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

结果是:

Parser error: The field, constructor or member 'Get' is not defined

为什么这行不通,我如何使用模式匹配或更合适的技术来实现相同的目标?

最佳答案

正如 John Palmer 在他的评论中指出的那样,您可以这样写:

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"
    | _ -> ""

关于f# - 如何在 F# 中对 HttpMethod 进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30136061/

相关文章:

generics - 是否可以为 F# 元组创建扩展方法

json - 难以在关联类型的实例上进行模式匹配

enums - 为什么在将类似结构的枚举变体与字段进行模式匹配时会出现错误?

sqlite - C中的sqlite模式匹配

dynamic - F#中的C#'s '动态”

f# - 与 OCaml 的 'lsr' 和 'asr' 等效的 F# 按位运算符是什么?

java - Java 中的解析文件和模式检测

vim - 如何使用 vi 或 Vim 在文件中生成数字序列?

f# - 在 FAKE 构建脚本中使用特定版本的 MSBuild

F# 不区分大小写的字符串比较