게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

Ocaml 예외 처리에 대하여 질문

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
lotas123



가입: 2009년 9월 18일
올린 글: 12

올리기올려짐: 2009년11월1일 19:40    주제: Ocaml 예외 처리에 대하여 질문 인용과 함께 답변

Ocaml 에서 예외처리를 어떻게 해야 하는지 궁금합니다.

Tutorial 에는

raise Error 이런식으로 되어 있는데 실제로 이런 구문을 넣을 경우 Unbounded Costruct Error 가 발생하네요

그래서 다른 방식을 찾아서 raise (Error "message") 와 같이 해도 역시 에러가 납니다.

어떻게 해야 올바르게 에러처리를 할 수 있는지 알려주시길 부탁드립니다.
위로
사용자 정보 보기 비밀 메시지 보내기
임창원



가입: 2009년 9월 14일
올린 글: 21

올리기올려짐: 2009년11월1일 20:00    주제: 인용과 함께 답변

exception Error라고 맨위에 써주고

raise Error라고 쓰면 되는거 같아요
위로
사용자 정보 보기 비밀 메시지 보내기
장수원



가입: 2008년 9월 26일
올린 글: 167

올리기올려짐: 2009년11월1일 22:22    주제: 인용과 함께 답변

예외를 발생시키려면 먼저 정의를 해야 합니다. 타입을 정의할 때 Value Constructor가 인자를 받을 수 있듯이 예외도 인자를 받을 수 있습니다.
코드:

exception SomeError
exception SomeStringError of string
exception SomeIntError of int


정의한 뒤에는 필요할 때 예외를 발생시킬 수 있습니다. 인자가 필요한 예외의 경우에는 반드시 괄호로 묶어주어야 합니다. 예컨데 'raise SomeIntError 128' 이라고 하면 '(raise SomeIntError) 128'로 해석하여 SomeIntError 에 필요한 인자가 없다는 에러가 발생합니다.
코드:

raise SomeError
raise (SomeStringError "invalid string")
raise (SomeIntError 128)


예외가 발생한 경우에 처리해주는 방법은 다음과 같습니다.
코드:

let f x = if x > 0 then x else raise (SomeStringError "Non-possitive")

let v = try f 0 with
  SomeStringError s -> (print_endline s);  1

v는 값 1을 가지고, "Non-posstive"라는 문자열을 화면에 찍습니다.

그리고 OCaml은 미리 정의된 예외들이 있습니다. 그 중에서
코드:

exception Not_found

를 이번 숙제에서 사용합니다. 미리 정의되어 있으니 따로 정의할 필요없이 발생시킬 수 있는 예외입니다. 미리 정의된 모든 예외는 다음 문서에서 확인할 수 있습니다.
http://caml.inria.fr/pub/docs/manual-ocaml/manual033.html
예외 뿐만 아니라 미리 정의된 모든 타입과 값들에 대해 잘 설명되어 있습니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.210 Principles of Programming (Fall 2009) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay