OCaml中元组的类型注释
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OCaml中元组的类型注释相关的知识,希望对你有一定的参考价值。
我正在研究Jason Hickey的Objective Caml简介中的练习,它询问是否有办法重写以下函数,以便nth
可以采用异构元组
let nth i (x, y, z) =
match i with
1 -> x
| 2 -> y
| 3 -> z
| _ -> raise (Invalid_argument "nth")
我的解决方案如下
let nth 1 (x, _, _) = x
let nth 2 (_, y, _) = y
let nth 3 (_, _, z) = z
let nth _ (_, _, _) = raise (Invalid_argument "nth")
但是,此解决方案不会抑制编译器发出非详尽匹配的警告。所以我想知道是否有更好的方法来解决这个问题。特别是是否有语法来注释元组的类型?
答案
您的问题的根本原因是OCaml不支持多子句功能。您实际上不是在函数参数上进行模式匹配,而是使用相同的名称定义了四个不同的函数,每个函数之前都没有了。您需要改用match
:
let nth i tuple =
match i, tuple with
| 1, (x, _, _) -> x
| 2, (_, y, _) -> y
| 3, (_, _, z) -> z
| _ -> raise (Invalid_argument "nth")
组类型使用*
分隔元素,因此上述tuple
的类型是int * int * int
。
以上是关于OCaml中元组的类型注释的主要内容,如果未能解决你的问题,请参考以下文章