@Fn: 함수 타입을 직접 만들어 주는 내장 함수
@Fn: 함수 타입을 직접 만들어 주는 내장 함수
이번에는 Zig의 내장 함수
@Fn을 살펴볼게요. 인자로 주는 타입 정보를 바탕으로, 우리가 원하는 형태의 함수 타입을 컴파일 타임에 만들어 주는 함수예요. 출처: Zig Documentation
본문
보통은 함수를 직접 정의하면 그 타입도 저절로 따라오죠. 그런데 때로는 "이런 시그니처를 가진 함수 타입"을 그 자체로 하나의 값처럼 얻고 싶을 때가 있어요. 그럴 때 쓰는 게 @Fn이에요.
@Fn은 다음과 같이 선언해요.
@Fn(
comptime param_types: []const type,
comptime param_attrs: *const [param_types.len]std.lang.Type.Fn.ParamAttributes,
comptime ReturnType: type,
comptime attrs: std.lang.Type.Fn.Attributes,
) type
param_types로 매개변수들의 타입을,ReturnType으로 반환 타입을 지정해요.- 각 매개변수에 붙일 속성(attribute)은
param_attrs로, 함수 전체에 붙일 속성은attrs로 넘겨요. - 이 모든 인자는
comptime이라서 컴파일 타임에 확정되어야 해요.
@Fn은 인자로 주어진 속성들을 반영한 함수 타입을 반환해요. 즉 "이런 인자를 받고 이런 값을 돌려주는 함수"라는 타입 자체를 만들어 주는 거죠. 실제 함수의 동작을 정의하는 게 아니라, 그 함수가 가져야 할 모양만 규정한다는 점이 핵심이에요.
반환 타입이 type이라는 것에 주목해 보면, 이 함수가 타입을 만들어 내는 metaprogramming 용도로 쓰인다는 게 좀 더 와 닿을 거예요.
더 알아보기 (Learn more)
- 함수 타입이 실제로 어떻게 쓰이는지 궁금하다면 Functions 섹션을 함께 보면 좋아요.