table.unpack과 가변 인자
Coddy Lua 여정의 Luau 소개 섹션에 포함된 레슨. 73개 중 20번째.
때때로 separate 값으로 필요하지만 array에 값이 들어 있는 경우가 있습니다. 예를 들어 각 element를 자체 argument로 전달해야 할 때입니다. 이것이 table.unpack입니다. array의 모든 element를 펼쳐서 반환합니다.
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에서는 여기에 type을 지정할 수 있으므로 들어오는 모든 값이 일치해야 합니다.
local function sum(...: number): number
local total = 0
for i = 1, select("#", ...) do
total += select(i, ...)
end
return total
endselect("#", ...)는 도착한 argument의 개수를 반환하고, select(i, ...)는 i 위치부터 그 이후의 argument를 반환합니다. 표현식에서 단일 값으로 사용하면 사실상 “i번째 argument”입니다.
두 기능은 함께 사용할 수 있습니다. sum(table.unpack(scores))는 array를 vararg function에 곧바로 펼쳐 전달합니다. 이는 다른 언어에서 볼 수 있는 spread-call 패턴에 대한 Luau의 해답입니다. table.unpack은 array를 수정하지 않고 읽습니다.
챌린지
쉬움85, 92 및 78을 포함하는 타입이 지정된 array scores: {number}을 만드세요.
table.unpack을 사용하여 모든 scores를 한 줄에 출력하세요.math.max와table.unpack을 사용하여 가장 높은 scores를 출력하세요.select("#", ...)및select(i, ...)를 사용하여 모든 argument를 더하는local function sum(...: number): number을 define한 다음,sum(table.unpack(scores))을 출력하세요.- 동일한 function이 일반 argument에서도 작동한다는 것을 보여 주기 위해
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과 가변 인자요약: 배열과 맵직접 연습해 보세요: 온라인 Lua 컴파일러