가변 인자 함수 (...)
Coddy Lua 여정의 논리와 흐름 제어 섹션에 포함된 레슨. 54개 중 11번째.
때로는 개수에 상관없이 인수를 처리할 수 있는 함수가 필요합니다. 두 개든, 세 개든, 열 개든 각 경우마다 별도의 함수를 작성하지 않고 합계를 계산하고 싶을 수도 있습니다. Lua는 이를 위한 특별한 구문인 점 세 개 ...를 제공합니다.
함수의 매개변수 목록에 ...를 넣으면, 임의의 개수의 인수를 받는 가변 인수 함수가 됩니다:
function sum(...)
-- 함수 본문
end함수 안에서 ...를 다시 사용하여 이러한 인수에 접근할 수 있습니다. 더 쉽게 다루려면 중괄호를 사용해 인수들을 테이블에 담을 수 있습니다:
function sum(...)
local args = {...}
local total = 0
for i = 1, #args do
total = total + args[i]
end
return total
end
print(sum(5, 10, 15)) -- 출력: 30
print(sum(1, 2, 3, 4, 5)) -- 출력: 15표현식 {...}은 함수에 전달된 모든 인수를 포함하는 목록형 테이블을 만듭니다. 그런 다음 길이 연산자 #나 ipairs()를 사용해 다른 테이블과 마찬가지로 이 테이블을 반복 순회할 수 있습니다.
인수가 nil이 아닌 한 이 방식은 작동합니다. nil은 테이블에 빈자리를 만들며, 빈자리가 있는 테이블에서는 #을 신뢰할 수 없습니다. select("#", ...)는 nil인 인수도 포함해 항상 인수의 개수를 반환합니다.
function countArgs(...)
return select("#", ...)
end
print(countArgs(10, 20, 30)) -- 출력: 3
print(countArgs(10, nil, 30, nil)) -- 출력: 4챌린지
쉬움임의 개수의 숫자 인수를 받아 평균을 반환하는 함수 calculateAverage를 작성하세요.
가변 인수 구문 ...을 사용해 유연한 개수의 인수를 받고, 이를 테이블에 담아 합계를 계산한 다음 인수의 개수로 나누세요.
참고: 시작 코드는 ("Don't touch this code"라고 표시됨) 입력에서 숫자를 읽고, 각 값을 tonumber()를 사용해 텍스트에서 숫자로 변환한 다음 numbers라는 테이블에 저장합니다. 마지막에는 unpack(numbers)를 사용해 함수를 호출합니다. 이 함수는 테이블의 값을 각각의 인수로 전달하므로, 함수는 이를 ...로 받습니다. 이 코드를 수정하거나 자세히 이해할 필요는 없습니다. calculateAverage를 작성하는 데만 집중하세요.
논리:
{...}를 사용해 모든 인수를 테이블에 담기- 테이블을 순회하며 모든 숫자의 합계 계산하기
- 평균을 구하기 위해 합계를 인수의 개수로 나누기
- 평균을 숫자로 반환하기
매개변수:
...(숫자): 개수가 정해지지 않은 숫자 인수
반환값: 제공된 모든 숫자의 평균 (숫자)
직접 해보기
-- 이 코드를 수정하지 마세요 --
local numbers = {}
while true do
local input = io.read()
if input == nil or input == "" then
break
end
local num = tonumber(input)
if num then
table.insert(numbers, num)
end
end
-------------------------
function calculateAverage(...)
-- 여기에 코드를 작성하세요
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름 제어의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러