가변 인자 함수 (...)
Coddy Lua 여정의 로직 및 흐름 제어 (Logic & Flow) 섹션에 포함된 레슨. 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{...} 표현식은 함수에 전달된 모든 인수를 포함하는 목록 스타일의 table을 생성합니다. 그런 다음 길이 연산자 # 또는 ipairs()를 사용하여 다른 table과 마찬가지로 이 table을 반복할 수 있습니다.
챌린지
쉬움calculateAverage function을 작성하여 숫자 인수를 원하는 개수만큼 받아 average를 반환하세요.
가변 개수의 인수를 받으려면 가변 인수 구문 ...을 사용하고, 이를 table에 담은 다음 합계를 계산하여 개수로 나누세요.
참고: "Don't touch this code"로 표시된 시작 코드는 input에서 numbers를 읽고, 각 항목을 tonumber()를 사용하여 텍스트에서 숫자로 변환한 뒤 numbers라는 table에 저장합니다. 마지막에는 unpack(numbers)를 사용하여 function을 호출합니다. 이 구문은 table의 값을 개별 인수로 펼치므로, function은 해당 값을 ...으로 받습니다. 이 코드를 자세히 수정하거나 이해할 필요는 없습니다. calculateAverage 작성에만 집중하세요.
로직:
- 모든 인수를
{...}을 사용하여 table에 담기 - table을 순회하여 모든 숫자의 합계 계산하기
- average를 구하기 위해 합계를 인수의 개수로 나누기
- average를 숫자로 return하기
매개변수:
...(numbers): 숫자 인수를 원하는 개수만큼 받음
반환값: 제공된 모든 숫자의 average (number)
직접 해보기
-- 이 코드를 건드리지 마세요 --
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
local average = calculateAverage(unpack(numbers))
print("Average: " .. average)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름 제어 (Logic & Flow)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러