table.unpack과 가변 인자
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨 — 73개 중 20번째.
때로는 배열에 값이 들어 있지만 각각의 element를 별개의 argument로 전달하기 위해 이를 개별 값으로 펼쳐야 할 때가 있습니다. 이것이 바로 table.unpack의 역할입니다. 배열의 모든 element를 Spread하여 return해 줍니다.
local scores: {number} = {85, 92, 78}
print(table.unpack(scores)) -- 85 92 78 (한 줄, 세 개의 값)
print(math.max(table.unpack(scores))) -- 92 — 각 요소가 인수가 됨이와 반대되는 개념은 varargs입니다. ...를 통해 몇 개든 상관없이 argument를 받는 function입니다. Lua에서 ...를 보신 적이 있을 것입니다 — Luau에서는 여기에 Typed를 지정할 수 있어, 들어오는 모든 values가 해당 타입을 만족해야 must 합니다:
local function sum(...: number): number
local total = 0
for i = 1, select("#", ...) do
total += select(i, ...)
end
return total
endselect("#", ...)는 얼마나 많은 argument가 전달되었는지 return하고, select(i, ...)는 i번째 위치부터 그 이후의 argument들을 return합니다 — 표현식 안에서 단일 값으로 사용될 경우, 이는 사실상 "i번째 argument"가 됩니다.
이 두 기능은 함께 조합되어 작동합니다: sum(table.unpack(scores))는 array를 vararg function into로 바로 펼쳐 넣습니다 — 이는 다른 언어에서 볼 수 있는 spread-call 패턴에 대한 Luau의 해법입니다. table.unpack은 array를 수정하지 않고 읽기만 합니다.
챌린지
쉬움85, 92, 78이 포함된 타입 지정 배열 scores: {number}를 만드세요.
table.unpack을 사용하여 한 줄에 모든 점수를 출력하세요.math.max와table.unpack을 사용하여 가장 높은 점수를 출력하세요.select("#", ...)및select(i, ...)를 사용해 모든 전달인자를 더하는local function sum(...: number): number를 정의한 다음,sum(table.unpack(scores))를 출력하세요.sum(10, 20)을 출력하여 동일한 함수가 일반 전달인자에서도 작동함을 보여주세요.
직접 해보기
-- 여기에 코드를 작성하세요
-- 1) scores: {number} = {85, 92, 78} 선언
-- 2) print(table.unpack(scores))와 언팩된 scores의 math.max 출력
-- 3) select로 sum(...: number): number 정의, sum(table.unpack(scores)) 출력
-- 4) sum(10, 20) 출력
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Luau 소개의 모든 레슨
7프로젝트: Typed Task Manager
프로젝트: 태스크 형태 정의하기태스크 추가 함수3타입이 지정된 테이블: 배열과 맵
타입이 지정된 배열요소 추가 및 읽기맵 타입이란?맵 선언 및 접근테이블 순회하기혼합 형태 테이블다차원 타입 배열table.unpack과 가변 인자요약: 배열과 맵