2017-04-19 28 views

回答

5

像这样的值的部分是通过模式匹配来访问的。下面是返回第一个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 

有更简洁的方式来写这个,但我认为这给出了最新的想法。

+0

谢谢!后续问题:如果类型定义有两个选项,如:type yearday = int * int * int |的YMD YD的int * int ;;有没有办法让y_of_ymd适用于这两种类型的定义,或者找到它的定义是哪种方法? –

+0

是的,具有不同的变体可能更常见,只有一个变体。我会更新我的答案。 –

+0

谢谢!这帮了很多。 –