제네릭 함수 사용하기
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 59번째.
identity에게 T가 무엇인지 알려 주지 않습니다. 검사기가 스스로 알아냅니다. 이것이 타입 추론입니다. 각 호출 위치에서 Luau는 인수를 살펴보고 T를 결정합니다.
local word = identity("Luau") -- T가 string으로 추론됨
local count = identity(12) -- T가 number로 추론됨
local flag = identity(false) -- T가 boolean으로 추론됨각 호출은 서로 독립적입니다. 한 줄에서는 T가 string일 수 있고, 다음 줄에서는 number일 수 있습니다. 추론된 결과는 직접 작성한 주석만큼 안전합니다. 검사기에게 word는 string이며, 자동 완성과 오류 검사를 모두 지원합니다.
TypeScript와 한 가지 중요한 차이점이 있습니다. TS에서는 identity<number>(5)를 사용해 호출 위치에서 타입을 강제로 지정할 수 있습니다. Luau에는 호출 위치 타입 인수가 없습니다. 해당 줄은 특별한 구문이 아니므로 Luau는 꺾쇠괄호를 less-than/greater-than 비교로 읽고 코드가 fails. 타입을 명시적으로 지정하려면 대신 변수에 주석을 추가하세요.
local count: number = identity(12)익숙한 도구를 사용해 추론이 작동하는 모습을 확인할 수 있습니다. typeof는 값의 runtime 타입 이름을 반환하므로 print(typeof(identity(12)))는 number를 출력합니다. 즉, 값이 generic function을 거치는 동안 완전히 변경되지 않았습니다.
챌린지
쉬움이전 lesson의 generic identity function이 이미 편집기에 있습니다. 그 추론을 활용하세요.
세 개의 변수를 만들고, checker가 T를 추론하도록 하세요(주석은 필요하지 않습니다).
word:"Luau"를 사용해identity를 호출count:12를 사용해identity를 호출flag:false를 사용해identity를 호출
다음 항목을 각각 별도의 줄에 출력하세요.
wordtypeof(word)의 결과counttypeof(count)의 결과flagtypeof(flag)의 결과
직접 해보기
-- 이전 강의의 제네릭 identity 함수
local function identity<T>(value: T): T
return value
end
-- 여기에 코드를 작성하세요
-- 1) identity 호출로 word, count, flag 생성 (T는 추론되도록)
-- 2) 각 값 뒤에 typeof를 붙여 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러