5.19 try/catch
5.19 try/catch
Haxe는 try/catch 구문을 사용해 값을 잡을 수 있어요:
try try-expr
catch (varName1:Type1) catch-expr-1
catch (varName2:Type2) catch-expr-2
런타임 중 try-expression의 평가가 throw를 일으키면, 이후의 어떤 catch 블록이 그것을 잡을 수 있어요. 이 블록들은 다음으로 구성됩니다:
- 던져진 값을 담는 변수 이름,
- 어떤 종류의 값을 잡을지 결정하는 명시적 타입 주석,
- 그 경우 실행할 표현식.
Haxe는 어떤 종류의 값이든 던지고 잡을 수 있어요. 특정 exception이나 error 클래스에서 상속받는 타입으로 제한되지 않습니다. 하지만 Haxe 4.1.0 이후에는 haxe.Exception과 그 후손의 인스턴스만 던지고 잡는 것이 강력히 권장됩니다.
Catch 블록은 위에서 아래로 검사되며, 던져진 값과 타입이 호환되는 첫 번째 블록이 선택됩니다.
이 과정은 컴파일 타임 유니피케이션(unification) 동작과 많은 유사성이 있어요. 하지만 검사가 런타임에 이루어져야 하므로 몇 가지 제한이 있습니다:
- 타입은 런타임에 존재해야 해요: 클래스 인스턴스(Class instances), 열거 인스턴스(enum instances), Dynamic, 익명 구조체(anonymous structures).
- 추상 타입과 관련된 catch는 런타임에 대상 타입으로 해석될 때만 동작할 수 있어요.
- catch 타입은
haxe.Exception인스턴스(또는 하위)여야 합니다.
try/catch의 타입: try 블록의 값과 모든 catch 블록의 값은 유니파이되어야 해요. 다이아몬드(catch 블록의 값이 try 블록과 타입에서 다르고 공통 타입이 없는) 상황에서는 결과 타입이 Dynamic이 될 수 있습니다.
try 블록과 catch 블록의 표현식이 모두 Void를 반환하면 전체 표현식도 Void예요.
출처: try/catch
본문
try/catch 기본
try try-expr catch (varName:Type) catch-expr ... 형태로, try 평가 중 throw된 값을 타입이 호환되는 첫 catch 블록이 잡아요. catch 블록은 변수명·타입 주석·실행 표현식으로 구성됩니다.
규칙
- Haxe 4.1 이후
haxe.Exception만 던지고 잡는 것이 권장됩니다. - catch 블록은 위에서 아래로 검사되고 첫 호환 블록이 선택돼요.
- 타입은 런타임에 존재해야 하며(클래스/열거/Dynamic/익명 구조체), 추상 타입 catch는 대상 타입으로 해석될 때만 동작합니다.
타입
try와 모든 catch 블록의 값 타입은 유니파이되어야 해요. 공통 타입이 없으면 Dynamic이 될 수 있고, 모두 Void면 전체도 Void입니다.