2017-04-19 7 views

답변

5

이와 같은 값의 부분은 패턴 일치를 통해 액세스됩니다. 이 최상위에 모양을

다음
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 
# 

업데이트 개 이상의 변종이있는 경우

여기에 첫 번째 INT를 반환하는 함수입니다 귀하는 어떤 종류의 가치가 있는지를 결정하기 위해 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 = YMD of int * int * int | int * int의 YD ;; y_of_ymd를 타입의 두가지 정의 모두에 대해 작동시키는 방법이 있는가? 아니면 그것이 어떤 정의인지를 찾는 방법 일까? –

+0

네, 변형이 다르면 변형이 하나 더 많을 수 있습니다. 내 대답을 업데이트 할게. –

+0

고마워요! 이것은 많은 도움이되었습니다. –