| 이전 주제 보기 :: 다음 주제 보기 | 
	
	
		| 글쓴이 | 메시지 | 
	
		| 박재훈 
 
 
 가입: 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
 | 
 |  | 
	
		| 위로 |  | 
	
		|  | 
	
		|  |