我有 2 个嵌套的歧视联合:
type ServiceTypes =
| Contexts
| Context of int
| Producers
type ServiceActions =
| Get of ServiceTypes
| Update of ServiceTypes
还有一个嵌套的匹配语句:
let s_action = match action with
| Get(stype) -> sprintf "Get%s" (match stype with
| Contexts -> sprintf "Contexts"
| Context(id) -> (sprintf "Context/%d" id))
| _ -> raise (RequestException("get"))
| Update(stype) -> sprintf "Update%s" (match stype with
| Producers -> (sprintf "Producers")
| _ -> raise (RequestException("update")))
目标是构建一个请求字符串,调用看起来像这样req.Send(Update Producers)
。
无论如何,出于我不明白的原因,编译器给了我 2 个警告:
- 在
Update(stype)
我得到一条这条规则永远不会被匹配 - 第一次
match stype
我在这个表达式上得到一个不完整的模式匹配。例如,值“生产者”可能表示模式未涵盖的情况。
所以问题是为什么我会收到这两个警告?我在匹配的过程中错过了什么吗?