이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
박재훈
가입: 2010년 9월 23일 올린 글: 8
|
올려짐: 2010년12월4일 11:23 주제: [플젝] 외부 모듈의 타입에 대한 패턴 매칭을 할 시엔 어떻게 해야 하나요? |
|
|
제목 그대로입니다.
Center.ml 에서 InfoFromServer.cmdResult, Avatar.avatarType 등의 타입과
Avatar.ml 에서 Map.grid, Map.sol 등의 타입에 대한 패턴 매칭을 할 시
각 패턴에 대해 Unbound constructor 라는 오류가 뜨는 것으로 보아서, 각 타입을 외부 모듈 어디에서 참조했으며 패턴은 이러이러하다 같은 정보를 추가로 써 줘야 할 것 같습니다.
어떻게 해야 하는지 궁금합니다. 몇 가지를 시도해 봤는데 다 오류가 나는군요... |
|
위로 |
|
|
이승중
가입: 2010년 6월 22일 올린 글: 561
|
올려짐: 2010년12월5일 11:54 주제: |
|
|
open을 써서 다른 파일 모듈을 열 수 있습니다.
ocaml은 파일도 모듈처럼 쓰기 때문에
Server.ml이면 Server라는 모듈을 만든 것입니다.
(Server.mli는 시그니처라고 보시면 됩니다)
open Server하면 Server.ml 안의 내용들이 현재 파일에서 Server. 을 안쓰고도 다 접근할 수 있게 됩니다.
여기서 Server안의 Map 모듈 안에 있는 type에 대해 패턴 매칭을 하려고 하면
코드: | match value with
| Map.Sol _ ->
| Map.Nothing -> |
이런식으로 쓰거나
다시 Map 모듈을 open 시켜서 현재 파일의 이름을 노출 시킬 수 있습니다.
코드: | open Server (* 파일 맨 위에다가 적습니다 *)
open Map (* Server안의 Map에 모듈에 대한 내용이 겉으로 드러나게 됩니다 *)
...
match value with
| Sol -> ...
| Nothing -> ...
|
open 하다가 보면 겹치는 이름이 생길 수 있는데, 이럴경우 모듈 이름을 쓰는 방식으로 구분하셔야 합니다. |
|
위로 |
|
|
김태훈
가입: 2010년 9월 6일 올린 글: 91
|
올려짐: 2010년12월5일 11:56 주제: |
|
|
저의 경우에는 모듈 안에 include Map 과 같은 방식으로 하였는데 이것과 open의 차이는 무엇인지 궁금해지네요 ㅎㅎ include의 경우에도 이것저것 아무거나 막 부르면 이름이 겹치더라구요 ㅋ |
|
위로 |
|
|
이승중
가입: 2010년 6월 22일 올린 글: 561
|
올려짐: 2010년12월5일 12:00 주제: |
|
|
open은 접근할 수 있는 이름을 열어준다는 의미이고
include는 말 그대로 포함시키는 것입니다.
include A 하면 A 모듈에 있는 내용들이 그대로 복사되서 현재 모듈에 들어갑니다.
코드: | module A = struct
let a = 1
end
module B = struct
include A
let b = 2
end
let _ = print_int B.a |
|
|
위로 |
|
|
|