제네릭 for와 break
pairs/ipairs와 함께 제네릭 for를 사용하고 break로 반복 흐름을 제어합니다.
제네릭 for와 break은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
일반 for 프로토콜
Lua의 일반 for 반복문은 반복자 함수와 함께 작동합니다. 문법은 for vars in iter_func, state, init do입니다. 각 반복에서 Lua는 iter_func(state, lastVar)를 호출하고, 반환값을 vars에 대입합니다. 첫 번째 반환값이 nil이면 반복문이 종료됩니다.
-- Manual use of next() iterator
local t = {a=1, b=2, c=3}
local key, val = next(t, nil) -- first entry
while key ~= nil do
print(key, val)
key, val = next(t, key) -- advance
end모든 키에 pairs() 사용하기
pairs(t)는 문자열 키, 정수 키, 혼합 키를 포함하여 테이블의 모든 키-값 쌍을 순회하는 반복자를 반환합니다. 정수가 아닌 키의 순회 순서는 지정되지 않습니다(해시 순서). 배열 부분과 해시 부분이 모두 포함됩니다.
local config = {
host = "localhost",
port = 8080,
debug = true,
[1] = "first",
}
for key, value in pairs(config) do
print(key, value)
end
-- Prints all 4 entries in any order배열 키에 ipairs() 사용하기
ipairs(t)는 1부터 시작하는 정수 키를 순회하며, 첫 번째 nil 값에서 멈춥니다. 안전하고 예측 가능하며 순서를 유지합니다. 순서가 중요하고 첫 번째 빈 위치에서 중단하려는 배열 형태의 테이블에는 ipairs를 사용하십시오.
local fruits = {"apple", "banana", "cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherry
-- stops at first nil
local t = {10, 20, nil, 40}
for i, v in ipairs(t) do
print(i, v) -- only 1,10 and 2,20
endpairs와 ipairs 비교
각각 언제 사용하는지 알아두십시오. ipairs는 순서가 있는 연속 배열에 사용하고, pairs는 사전이나 혼합 테이블에 사용합니다. ipairs는 첫 번째 nil 빈 위치에서 멈추지만, pairs는 nil이 아닌 모든 키를 방문합니다. 순수한 배열에는 ipairs가 더 관용적입니다.
local mixed = {10, 20, key="val", 30}
-- ipairs only sees array part in order
print("ipairs:")
for i, v in ipairs(mixed) do
print(i, v) -- 1:10, 2:20, 3:30
end
-- pairs sees everything
print("pairs:")
for k, v in pairs(mixed) do
print(k, v) -- 1:10, 2:20, 3:30, key:val
end클로저로 사용자 지정 반복자 만들기
클로저를 사용하여 자신만의 반복자를 작성할 수 있습니다. 팩토리 함수는 호출할 때마다 위치를 이동하는 상태 저장 클로저를 반환합니다. 반환할 항목이 더 이상 없으면 nil을 반환하여 일반 for 반복문을 종료합니다.
local function range(from, to, step)
step = step or 1
local i = from - step
return function()
i = i + step
if i <= to then return i end
end
end
for n in range(1, 10, 2) do
io.write(n .. " ")
end
print() -- 1 3 5 7 9반복자로 string.gmatch 사용하기
string.gmatch(s, pattern)은 문자열 s에서 패턴과 일치하는 모든 항목을 순회하는 반복자를 반환합니다. 문자열을 나누거나, 토큰을 추출하거나, 패턴이 나타나는 모든 위치를 찾을 때 흔히 사용합니다.
local sentence = "the quick brown fox"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- the
-- quick
-- brown
-- fox일반 for에서 break 사용하기
break를 사용하면 일반 for 반복문을 일찍 종료할 수 있습니다. 이는 검색에 유용합니다. 일치하는 항목을 찾을 때까지 순회한 다음 break로 빠져나오면 됩니다. break 후에는 실행이 end 다음에 있는 문장에서 계속됩니다.
local inventory = {
{name="sword", damage=50},
{name="shield", armor=30},
{name="bow", damage=35},
}
local target = "shield"
for i, item in ipairs(inventory) do
if item.name == target then
print("Found at index", i)
break
end
end순회 중 테이블 수정하기
pairs()로 순회하는 동안 테이블에 키를 삽입하거나 삭제하지 마십시오. 동작이 정의되지 않기 때문입니다(일부 변경 사항은 반영되고 다른 변경 사항은 건너뛸 수 있습니다). 테이블을 수정해야 한다면 임시 목록에 변경 사항을 모은 후 반복문이 끝난 다음 적용하십시오.
local t = {a=1, b=2, c=3, d=4}
local toDelete = {}
-- Collect keys to delete
for k, v in pairs(t) do
if v % 2 == 0 then
toDelete[#toDelete+1] = k
end
end
-- Delete after iteration
for _, k in ipairs(toDelete) do
t[k] = nil
end
-- t = {a=1, c=3}열거 패턴
인덱스와 값을 모두 사용해야 한다면 둘 다 제공하는 ipairs를 사용하십시오. 값만 필요하고 인덱스는 중요하지 않다면 인덱스에 관례적인 “사용하지 않는 변수” 이름인 _를 사용할 수 있습니다.
local colors = {"red", "green", "blue"}
-- With index
for i, color in ipairs(colors) do
print(i .. ": " .. color)
end
-- Ignore index with _
for _, color in ipairs(colors) do
print(color) -- just the values
endnext() 직접 사용하기
next(t, key)는 내부에서 순회에 사용하는 함수입니다. key 다음의 키-값 쌍을 반환하며, 더 이상 없으면 nil을 반환합니다. next(t, nil)은 첫 번째 항목을 제공합니다. next(t) ~= nil을 사용하면 테이블이 비어 있지 않은지 확인할 수 있으며, 항목을 세는 것보다 빠릅니다.
local function isEmpty(t)
return next(t) == nil
end
print(isEmpty({})) -- true
print(isEmpty({1,2,3})) -- false
print(isEmpty({a=1})) -- false빠른 확인
테이블의 첫 번째 nil 빈 위치에서 멈추는 반복자는 무엇입니까?
복습: 일반 for와 break
요약:
pairs(t)— 모든 키를 순서와 관계없이 순회합니다ipairs(t)— 정수 키 1..n을 순서대로 순회하며 nil에서 멈춥니다- 사용자 지정 반복자: 중단을 위해 nil을 반환하는 클로저를 반환합니다
break는 반복문을 일찍 종료합니다- pairs로 순회하는 중에는 테이블을 수정하지 마십시오. 변경 사항을 모아 나중에 적용하십시오
next(t) == nil— 빠르게 비어 있는지 확인합니다
자주 묻는 질문
“제네릭 for와 break” 강의는 무료인가요?
네 — “제네릭 for와 break” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“제네릭 for와 break”에서 뭘 배우나요?
pairs/ipairs와 함께 제네릭 for를 사용하고 break로 반복 흐름을 제어합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Lua Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“제네릭 for와 break” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- if, elseif 및 else 문
- while 및 repeat-until 반복문
- 숫자형 for 반복문
- 제네릭 for와 break