3
有以下类型定义OCaml中:ocaml的如何访问元素类型定义
type yearday = YMD of int * int * int
你会如何访问类型的不同的整数?就好像我只想要第一个int的值。
有以下类型定义OCaml中:ocaml的如何访问元素类型定义
type yearday = YMD of int * int * int
你会如何访问类型的不同的整数?就好像我只想要第一个int的值。
像这样的值的部分是通过模式匹配来访问的。下面是返回第一个INT函数:
let y_of_ymd (YMD (y, _, _)) = y
这里是它的外观在顶层(OCaml的REPL):
# let y_of_ymd (YMD (y, _, _)) = y;;
val y_of_ymd : yearday -> int = <fun>
# let myymd = YMD (2017, 4, 18);;
val myymd : yearday = YMD (2017, 4, 18)
# y_of_ymd myymd;;
- : int = 2017
#
更新
如果你有一个以上的变种您的类型可以使用match
来确定存在哪种类型的值
type yearday = YMD of int * int * int | YD of int * int
let y_of_yearday yearday =
match yearday with
| YMD (y, _, _) -> y
| YD (y, _) -> y
有更简洁的方式来写这个,但我认为这给出了最新的想法。
谢谢!后续问题:如果类型定义有两个选项,如:type yearday = int * int * int |的YMD YD的int * int ;;有没有办法让y_of_ymd适用于这两种类型的定义,或者找到它的定义是哪种方法? –
是的,具有不同的变体可能更常见,只有一个变体。我会更新我的答案。 –
谢谢!这帮了很多。 –