네버 타입(Never type)

네버 타입(Never type)

프로그램이 정상적으로 값을 돌려주지 않을 때가 있어요. 패닉이 나거나 무한 루프에 빠지는 함수처럼, 결코 완료되지 않는 계산의 결과를 나타내는 타입이 네버 타입 ! 이에요. 값이 하나도 없는 타입이죠.

네버 타입 !은 값이 없는 타입으로, 결코 완료되지 않는 계산의 결과를 나타내요. ! 타입의 표현식은 어떤 다른 타입으로든 강제(coercion)될 수 있어요. 현재 ! 타입은 함수의 반환 타입에만 나타날 수 있고, 그 경우 결코 반환하지 않는 발산(diverging) 함수를 나타내요.

출처: Rust Reference

문법

NeverType → !

예를 들어 panic!을 호출하는 아래 함수는 절대 반환하지 않아요. 그래서 반환 타입이 !이에요.

#![allow(unused)]
fn main() {
fn foo() -> ! {
    panic!("This call never returns.");
}
}

외부 함수도 반환 타입으로 !을 가질 수 있어요.

#![allow(unused)]
fn main() {
unsafe extern "C" {
    pub safe fn no_return_extern_func() -> !;
}
}

더 알아보기