3.5.4 함수 반환(과 Void 유니피케이션)
3.5.4 함수 반환(과 Void 유니피케이션)
함수 반환 타입의 유니피케이션은 Void 타입과 연관될 수 있으며, 무엇이 Void와 유니파이되는지에 대한 명확한 정의가 필요해요. Void는 타입의 부재를 나타내므로 Dynamic을 포함한 어떤 다른 타입에도 할당할 수 없습니다. 즉 함수가 명시적으로 Dynamic을 반환한다고 선언되면, Void를 반환할 수 없어요.
반대도 마찬가지입니다: 함수가 Void 반환 타입을 선언하면 Dynamic이나 다른 어떤 타입도 반환할 수 없어요. 하지만 이 방향의 유니피케이션은 함수 타입을 할당할 때 허용됩니다:
var func:Void->Void = function() return "foo";
오른쪽 함수는 명백히 Void->String 타입인데도, Void->Void 타입의 변수 func에 할당할 수 있어요. 이는 컴파일러가 반환 타입이 무관하다고 안전하게 가정할 수 있기 때문입니다. 그 반환 값이 비-Void 타입에는 할당될 수 없으니까요.
출처: Function Return
본문
Void와의 유니피케이션 규칙
Void는 타입의 부재라서, 어떤 타입에도 할당할 수 없어요(Dynamic 포함). Dynamic을 반환한다고 선언한 함수는 Void를 반환할 수 없고, Void 반환 함수도 다른 타입을 반환할 수 없습니다.
함수 타입 할당에서의 예외
하지만 함수 타입을 할당할 때는 예외가 있어요. Void->String 형태의 함수는 Void->Void 변수에 할당될 수 있습니다. 반환 값이 어차피 못 쓰이니 타입이 무관하다고 안전하게 판단하기 때문이에요.