| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
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은 미리 정의된 예외들이 있습니다. 그 중에서
를 이번 숙제에서 사용합니다. 미리 정의되어 있으니 따로 정의할 필요없이 발생시킬 수 있는 예외입니다. 미리 정의된 모든 예외는 다음 문서에서 확인할 수 있습니다.
http://caml.inria.fr/pub/docs/manual-ocaml/manual033.html
예외 뿐만 아니라 미리 정의된 모든 타입과 값들에 대해 잘 설명되어 있습니다. |
|
| 위로 |
|
 |
|