Menu
CoddyTech

익명 함수

Coddy Lua 여정의 로직 및 흐름 제어 (Logic & Flow) 섹션에 포함된 레슨. 54개 중 13번째.

함수를 변수에 저장하고 전달할 수 있다는 것을 이해했으니, 함수를 작성하는 더 간결한 방법도 알아보겠습니다. 항상 함수에 이름을 붙이는 대신, 필요한 곳에서 바로 함수를 만들 수 있습니다. 이를 익명 함수라고 합니다.

익명 함수는 이름이 없는 함수입니다. function 키워드 바로 뒤에 매개변수와 본문을 붙여 정의합니다:

function(a, b)
    return a + b
end

이렇게 하면 바로 사용할 수 있는 함수 값이 생성됩니다. 익명 함수는 함수를 다른 함수의 인수로 전달할 때 특히 유용합니다. 앞에서 본 사용자 지정 정렬 예제를 기억하시나요? 익명 함수를 사용하면 다음과 같습니다.

local players = {
    {name = "Alice", score = 150},
    {name = "Bob", score = 200},
    {name = "Charlie", score = 175}
}

table.sort(players, function(a, b)
    return a.score > b.score
end)

비교를 위한 별도의 이름 있는 함수를 정의하는 대신, 함수가 table.sort()의 두 번째 인수로 직접 생성됩니다. 이렇게 하면 코드가 더 간결해지고 정렬 로직을 사용하는 바로 그곳에 둘 수 있습니다.

challenge icon

챌린지

쉬움

filterByThreshold 함수를 작성하세요. 이 함수는 numbers와 threshold를 받아 threshold보다 큰 숫자만 포함하는 새 테이블을 반환합니다.

편집기에는 이미 도우미 함수 filter(list, keep)가 있습니다. 이 함수는 각 값에 대해 keep(value)를 호출하고, keep가 true를 반환한 값들로 새 테이블을 반환합니다. filter를 호출하고, 검사 함수를 호출문 안에 직접 작성한 익명 함수로 전달하세요. 레슨에서 table.sort()에 함수를 전달하는 방식과 같습니다. 검사를 변수에 저장하거나 이름을 지정하지 마세요.

매개변수:

  • numbers (table): 숫자 값을 포함하는 리스트 형식의 테이블
  • threshold (number): 필터링 기준이 되는 최솟값(미포함)

반환값: threshold보다 큰 숫자만 포함하는 테이블 (table)

직접 해보기

local function filter(list, keep)
    local result = {}
    for _, value in ipairs(list) do
        if keep(value) then
            table.insert(result, value)
        end
    end
    return result
end

function filterByThreshold(numbers, threshold)
    -- 여기에 코드를 작성하세요
end
quiz icon실력 점검

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

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

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