기본 함수
기본 함수 (Basic Functions)
기본 함수(basic functions)는 전역 네임스페이스에 직접 노출되는 함수들이에요. 루아 코드에서 이름만으로 호출할 수 있어요.
assert
assert (v [, message])
v가 참(즉 false나 nil이 아님)이면 v를 반환해요. v가 거짓이면 오류를 발생시켜요. message가 주어졌고 v가 거짓이면 그 메시지로 오류를 내요. message가 주어지지 않으면 인자 기본 오류 메시지를 사용해요.
local x = assert(io.open("file.txt", "r"), "파일을 열지 못했습니다")
collectgarbage
collectgarbage ([opt [, arg]])
가비지 컬렉터를 제어해요. opt 옵션에 따라 동작이 달라져요.
"collect"— 즉시 전체 가비지 컬렉션을 수행하고 0을 반환해요."stop"— 컬렉터를 정지시켜요."restart"— 컬렉터를 다시 시작해요."count"— 현재 사용 중인 메모리의 총량을 KB 단위(실수)로 반환해요. 두 번째 반환값으로 바이트 단위 일부(0~1023)도 반환해요."step"— 컬렉터를 한 단계 진행해요. 컬렉터가 어떤 작업을 수행했으면true, 그렇지 않으면false를 반환해요."setpause"— 증분 모드의 일시 정지 값을arg로 설정해요. 이전 값을 반환해요."setstepmul"— 증분 모드의 스텝 승수를arg로 설정해요. 이전 값을 반환해요."isrunning"— 컬렉터가 실행 중인지 반환해요."incremental"— 증분 모드로 전환하고, 선택적으로pause,stepmul,stepsize값을 설정해요."generational"— 세대 모드로 전환하고, 선택적으로minor,major값을 설정해요.
dofile
dofile ([filename])
파일의 내용을 청크로 읽어 실행하고, 그 청크의 반환값을 반환해요. filename이 없으면 표준 입력(stdin)을 읽어요. 오류가 발생하면 처리되지 않고(보호되지 않고) 전파돼요. loadfile + 보호되지 않은 호출과 유사해요.
error
error (message [, level])
오류를 발생시켜요. message는 어떤 값이든 될 수 있어요 (보통 문자열). level은 오류 위치 정보를 어떻게 덧붙일지 정해요.
level = 1(기본값):error를 호출한 위치를 오류 위치로 사용.level = 2:error를 호출한 함수를 호출한 위치를 사용.level = 0: 위치 정보를 추가하지 않음.
_G
_G
전역 테이블(global table)을 가리키는 전역 변수예요. _G 자체는 전역 테이블을 담고 있어서, _G.foo처럼 전역 변수 foo에 접근하는 것과 foo에 접근하는 게 같아요. _G["print"]도 print와 같아요.
getmetatable
getmetatable (object)
object의 메타테이블을 반환해요. 메타테이블의 __metatable 필드가 있으면 그 값을 대신 반환해요. 메타테이블이 없으면 nil을 반환해요.
ipairs
ipairs (t)
순회 반복자 함수, 상태, 초기 제어 변수(0) 세 개를 반환해요. 이 세 값을 일반 for(for i, v in ipairs(t))로 사용하면 배열 부분(1부터 시작하는 연속 정수 키)을 순회해요. t[1], t[2], ... 가 nil이 아닐 때까지 반복해요. __index 메타메서드는 사용하지 않아요.
load
load (chunk [, chunkname [, mode [, env]]])
chunk를 루아 청크로 읽어 컴파일한 함수를 반환해요. chunk는 문자열이거나 읽기 함수(리더, reader)일 수 있어요.
chunk가 문자열이면 그 문자열을 청크로 컴파일해요.chunk가 함수면, 그 함수는 청크를 조각별로 반환하는 리더로 취급돼요 (각 호출이 문자열 조각 또는nil반환).chunkname은 오류 메시지와 디버그 정보에 쓰일 청크의 이름이에요.mode는 청크가 텍스트("t"), 바이너리("b"), 또는 둘 다("bt", 기본값)인지 나타내요.env는 청크의 전역 환경(_ENV)으로 쓸 테이블이에요.
성공하면 로드된 함수를 반환하고, 실패하면 nil과 오류 메시지를 반환해요.
loadfile
loadfile ([filename [, mode [, env]]])
filename의 파일 내용을 청크로 컴파일한 함수를 반환해요. filename이 없거나 nil이면 표준 입력을 읽어요. mode와 env는 load와 동일한 의미예요. 성공 시 함수, 실패 시 nil과 오류 메시지를 반환해요.
next
next (table [, index])
프로그램이 테이블의 모든 필드를 순회할 수 있게 해요. next(t, index)는 테이블 t에서 index 다음의 키-값 쌍을 반환해요. index가 nil이면 첫 번째 쌍을 반환하고, 더 이상 없으면 nil을 반환해요. 반환 값은 key, value 두 개예요. 순회 중에 테이블을 변경하면 안 돼요 (순회 동작이 정의되지 않음). index로 nil을 전달하면 처음부터 시작해요.
pairs
pairs (t)
테이블 전체(모든 키)를 순회하는 반복자 함수, 테이블 t, 초기 제어 값 nil 세 개를 반환해요. for k, v in pairs(t)로 사용해요. 순회 순서는 지정되지 않으며 테이블 내부 구현에 따라 달라져요. __pairs 메타메서드가 있으면 그것을 사용해요.
pcall
pcall (f [, arg1, ...])
함수 f를 보호 모드(protected mode)로 호출해요. 성공하면 true와 f의 반환값들, 실패하면 false와 오류 객체를 반환해요. 오류가 발생해도 pcall 자체는 반환되어, 프로그램이 오류를 처리할 수 있게 해요.
local ok, result = pcall(function() return risky() end)
if not ok then print("오류:", result) end
print (...) (생략 — 여러 값을 공백으로 구분해 출력)
각 인자를 tostring으로 변환한 뒤 공백으로 구분해 표준 출력에 출력하고, 마지막에 줄바꿈을 추가해요. print는 디버깅용으로만 사용하기를 권장해요.
rawequal
rawequal (v1, v2)
메타메서드를 호출하지 않고 두 값 v1, v2가 같은지(참조 또는 값) 비교해서 boolean을 반환해요.
rawget
rawget (table, index)
table[index]의 값을, 메타메서드(__index)를 사용하지 않고 직접 가져와요. index는 nil이 될 수 없어요.
rawlen
rawlen (v)
v의 길이를, 메타메서드를 사용하지 않고 반환해요. v는 문자열 또는 테이블이어야 해요.
rawset
rawset (table, index, value)
table[index] = value를, 메타메서드(__newindex)를 사용하지 않고 직접 수행해요. table을 반환해요.
select
select (index, ...)
index에 따라 인자를 선택하거나 개수를 반환해요.
index가 숫자면...에서index번째부터 끝까지의 인자들을 반환해요.index가"#"이면 인자의 총 개수를 반환해요.
print(select("#", "a", "b", "c")) --> 3
print(select(2, "a", "b", "c")) --> b c
setmetatable
setmetatable (table, metatable)
테이블 table의 메타테이블을 metatable로 설정해요. metatable이 nil이면 메타테이블을 제거해요. table의 __metatable 필드가 있으면 오류가 발생해요. 변경된 테이블을 반환해요.
tonumber
tonumber (e [, base])
e를 숫자로 변환하려 시도해요. 변환할 수 있으면 숫자, 없으면 nil을 반환해요.
base가 주어지면e를 그 진법의 정수 리터럴로 해석해요 (2~36).base가 없으면e가 숫자(또는 숫자로 보이는 문자열, 예:"10","3.5","0xff")면 그 숫자, 아니면nil.
print(tonumber("10")) --> 10
print(tonumber("0xff")) --> 255
print(tonumber("010", 8)) --> 8
print(tonumber("abc")) --> nil
tostring
tostring (v)
v의 문자열 표현을 반환해요. v에 __tostring 메타메서드가 있으면 그것을 호출해 결과를 반환해요. 숫자는 합리적인 표현으로 변환되고, 테이블/함수/스레드/userdata는 기본 표현(주소 포함)을 반환해요.
print(tostring(3.14)) --> 3.14
print(tostring({})) --> table: 0x...
type
type (v)
v의 타입 이름을 나타내는 문자열을 반환해요. 가능한 값: "nil", "boolean", "number", "string", "function", "thread", "table", "userdata".
print(type(10)) --> number
print(type("x")) --> string
print(type(nil)) --> nil
print(type({})) --> table
_VERSION
_VERSION
현재 사용 중인 루아 버전을 나타내는 문자열, 예: "Lua 5.4".
warn
warn (msg1, ...)
모든 인자를 연결해 경고 메시지를 제어하고 표준 오류 출력(stderr)에 출력해요. W 환경 변수나 자세한 설정에 따라 동작이 달라질 수 있어요. 경고는 보호된 호출 안에서 발생해도 전달돼요.
xpcall
xpcall (f, msgh [, arg1, ...])
이 함수는 pcall과 유사하지만, 오류가 발생했을 때 오류 객체를 인자로 하는 메시지 핸들러 msgh를 추가로 호출해요. msgh의 반환값이 새 오류 객체로 사용돼요. xpcall은 성공 시 true와 반환값들, 실패 시 false와 (핸들러가 만든) 오류 객체를 반환해요.
local ok, err = xpcall(risky, debug.traceback)
raw 정리
rawget, rawset, rawequal, rawlen은 메타메서드(특히 __index/__newindex)를 우회해 원시 테이블 연산을 수행하는 함수예요. 프로토콜을 지키지 않는 로우 레벨 접근이 필요할 때 쓰여요.
본문
기본 함수 사용 시 유의점
print는 실행 환경에 따라 기본 출력이 달라질 수 있어요 (독립 실행 인터프리터는 표준 출력).load/loadfile/dofile은 권한(샌드박스) 모델에서 주의해야 해요 — 로드된 청크는env로 제한할 수 있어요.collectgarbage는 성능 조정과 메모리 관리를 위한 고급 함수예요.