익명 함수
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()의 두 번째 인수로 직접 생성됩니다. 이렇게 하면 코드가 더 간결해지고 정렬 로직을 사용하는 바로 그곳에 둘 수 있습니다.
챌린지
쉬움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
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름 제어 (Logic & Flow)의 모든 레슨
직접 연습해 보세요: 온라인 Lua 컴파일러