제네릭 항등 함수
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 58번째.
다음은 제대로 만들어진 제네릭 함수(generic function) 형태의 identity 함수입니다:
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입니다
그런 다음 작성한 함수를 사용하여 다음 타입 지정 변수들을 만드세요:
number타입의luckyNumber—7을 전달하여identity를 호출합니다string타입의greeting—"Hello, Luau!"를 전달하여identity를 호출합니다boolean타입의isReady—true를 전달하여identity를 호출합니다
다음 항목들을 각각 한 줄씩 출력하세요:
luckyNumbergreetingisReadyprint내부에서 직접"<code>generics"를 전달하여identity를 호출한 결과print내부에서 직접99를 전달하여identity를 호출한 결과
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) identity<T>(value: T): T를 정의하세요
-- 2) identity 호출로 luckyNumber, greeting 및 isReady를 생성하세요
-- 3) 그것들을 출력한 다음, identity(지침의 정확한 텍스트)와 identity(99)를 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러