OCaml은 모듈 시스템을 지원한다.
dunn 파일의 (include_subdirs unqualified)
: 하위 디렉토리의 모든 소스코드도 같은 디렉토리에 있는 것으로 판단하고 모듈화
*모듈은 struct - end 구문을 통해 생성한다. 모듈 이름은 대문자로 시작해야 한다.
위와 같이 operation.ml 파일에 int 더하기와 float 더하기에 대한 모듈을 각각 IntOp와 FloatOp로 만들고
모듈 내에 포함된 모듈을 가져다 쓰려면 모듈이름.nested 모듈이름.변수or함수의 이름으로 접근해야 한다.
예를 들어 main.ml에서 operation.ml 파일 내의 모듈 IntOp의 함수 add를 가져다 쓰려면 Operation.IntOp.add 로 접근해야 한다.
(operation.ml이 모듈로 쓰였기 때문에 Operation으로 접근)
open
모듈을 오픈하면 모듈 이름 없이 모듈 내에 함수나 변수에 접근이 가능하다.
IntOp의 함수 add와 FloatOp의 함수 add는 이름이 똑같다.
따라서 바로 위의 예시처럼 IntOp와 FloatOp를 둘 다 open한 후에 add 를 사용하면 둘 중에 마지막에 open된 FloatOp에서 add를 가져다 사용한다. 이때 main.ml 에서 5줄을 보면 add의 인자로 int형이 들어가고 있기 때문에 type이 맞지 않아 Error가 발생한다.
Module rename
open을 하면 같은 이름의 함수나 변수가 있을 경우 충돌이 일어날 수 있다.
open말고 Module rename 방법을 이용하면 충돌을 막을 수 있다.
이 글은 제가 Ocaml을 공부하며 작성한 글로 정확하지 않은 부분이 있을 수 있습니다.
'Ocaml' 카테고리의 다른 글
OCaml의 try with, raise (0) | 2021.08.20 |
---|---|
OCaml의 pattern matching (0) | 2021.08.19 |
OCaml의 dune (0) | 2021.08.17 |
OCaml에서 Function Operator와 변수의 Scope (0) | 2021.08.17 |
OCaml의 함수 2 (0) | 2021.08.16 |
댓글