함수 매개변수 타입 추론
함수 매개변수 타입 추론 (Function Parameter Type Inference)
함수에서 매개변수의 타입이 항상 정해져 있으면 재사용하기가 불편할 때가 있어요. 예를 들어 숫자를 받아 42를 더하는 함수 하나로 정수형이건 실수형이건 상관없이 쓰고 싶다면요. 이럴 때 Zig는 매개변수 타입 자리에 anytype을 쓰면 호출 시점에 타입을 추론해 주는 기능을 제공해요.
본문
함수 매개변수는 타입 자리에 anytype을 붙여 선언할 수 있어요. 이 경우 매개변수 타입은 함수를 호출할 때 추론돼요.
추론된 타입에 대한 정보가 필요하면 @TypeOf와 @typeInfo를 사용하면 돼요.
const expectEqual = @import("std").testing.expectEqual;
fn addFortyTwo(x: anytype) @TypeOf(x) {
return x + 42;
}
test "fn type inference" {
try expectEqual(43, addFortyTwo(1));
try expectEqual(comptime_int, @TypeOf(addFortyTwo(1)));
const y: i64 = 2;
try expectEqual(44, addFortyTwo(y));
try expectEqual(i64, @TypeOf(addFortyTwo(y)));
}
위 예시에서 addFortyTwo는 매개변수 x의 타입을 anytype으로 두고, 반환 타입은 @TypeOf(x)로 선언돼 있어요. 즉 인자로 전달된 값의 타입에 맞춰 반환 타입까지 함께 결정되지요.
숫자 1을 넘기면 x는 컴파일 타임 정수(comptime_int)로 추론되고, i64 변수 y를 넘기면 x도 i64로 추론돼요. 첫 호출은 43, 둘째 호출은 44가 나오고, 각각의 @TypeOf 결과도 comptime_int와 i64로 정확히 일치하는 걸 테스트로 확인할 수 있어요.
$ zig test test_fn_type_inference.zig
1/1 test_fn_type_inference.test.fn type inference...OK
All 1 tests passed.