Menu
Coddy logo textTech

가변 인자 함수 (...)

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을 반복할 수 있습니다.

challenge icon

챌린지

쉬움

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)

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름 제어 (Logic & Flow)의 모든 레슨

직접 연습해 보세요: 온라인 Lua 컴파일러