제네릭 항등 함수
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 58번째.
제대로 구현된 identity 함수는 다음과 같습니다 — 바로 제네릭 함수(generic function)입니다:
local function identity<T>(value: T): T
return value
end함수 이름 뒤의 <T>는 타입 매개변수(type parameter)를 선언합니다. 이는 "호출될 때마다 결정되는 어떤 타입"을 나타내는 자리표시자입니다. 시그니처 내부에서는 T를 실제 타입처럼 사용합니다. 즉, 매개변수는 T 타입이고, 함수는 T 타입을 반환합니다.
입력과 출력에 동일한 T를 사용하는 것이 핵심 핵심입니다 — 이들을 서로 연결해 주기 때문입니다. identity("hello")를 호출하면 검사기는 해당 호출에 대해 T = string으로 결정하므로 결과는 string이 됩니다. identity(42)를 호출하면 T = number가 되므로 결과는 number가 됩니다. 하나의 본문으로 모든 타입을 처리하며 정보의 손실도 없습니다.
T는 관례적인 이름일 뿐입니다("Type"의 약자) — <Item>이나 <Value>를 사용해도 똑같이 동작합니다. 그리고 Luau에서 항상 그렇듯이 꺾쇠괄호는 타입 검사기를 위해서만 존재합니다. 런타임 시에는 이 코드가 일반적인 Lua 함수인 function identity(value) return value end로 동작합니다.
챌린지
쉬움다음 조건을 만족하는 identity라는 이름의 generic 함수를 작성하세요:
- 타입 매개변수
T를 선언합니다. - 타입이
T인value라는 이름의 매개변수를 하나 받습니다. - 반환 타입
T로 해당 값을 return합니다.
그런 다음 작성한 함수를 사용하여 아래의 타입을 가진 변수들을 생성하세요:
number타입의luckyNumber—7을 전달하여identity를 call합니다.string타입의greeting—"Hello, Luau!"를 전달하여identity를 call합니다.boolean타입의isReady—true를 전달하여identity를 call합니다.
다음 항목을 각각 한 줄씩 print하세요:
luckyNumbergreetingisReadyprint내부에서 직접"generics"를 전달하여identity를 call한 resultprint내부에서 직접99를 전달하여identity를 call한 result
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) identity<T>(value: T): T를 정의하세요
-- 2) identity 호출로 luckyNumber, greeting 및 isReady를 생성하세요
-- 3) 그것들을 출력한 다음 identity("generics")와 identity(99)를 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.