《루아프로그래밍》 독서노트 제8장: 번역, 집행과 오류
8.1 번역
8.1.1 loadfile
Lua에서 dofile 함수는 Lua 코드 블록을 실행하는 데 사용되지만 실제로dofile는 보조 함수일 뿐이고loadfile는 진정한 핵심 작업을 했다.loadfile은 파일에서 Lua 코드 블록을 불러오지만 코드를 실행하지 않고 코드를 컴파일하여 컴파일 결과를 함수로 되돌려줍니다.또한loadfile는 오류를 일으키지 않습니다. 오류 값만 되돌려주고 오류를 처리하지 않습니다.일반 dofile은 다음과 같이 정의됩니다.
function dofile(filename)
local f = assert(loadfile(filename))
return f()
end
loadfile가 실패하면 assert에서 오류가 발생합니다.
8.1.2 loadstring
함수loadstring은loadfile와 유사하지만 파일에서 코드를 읽는 것이 아니라 문자열에서 코드를 읽는 것이 다르다.loadstring은 비용이 많이 드는 함수이므로 조심스럽게 사용해야 한다.코드에 오류가 있으면loadstring은nil을 되돌려줍니다.loadstring은 호출할 때마다 코드를 컴파일합니다.loadsting은 컴파일할 때 문법역을 포함하지 않습니다.
i=32
local i = 0
f = loadstring("i=i+1; print(i)")
g = function() i=i+1; print(i) end
f() -->3, i
g() -->1, i
loadstring의 가장 전형적인 용법은 외부 코드를 실행하는 것이다. loadstring의 기대 입력은 하나의 프로그램 블록, 즉 일련의 문장이다.
8.2 C 코드
Lua 코드와 달리 C 코드는 사용하기 전에 응용 프로그램에 먼저 체인을 연결해야 하는데 가장 간단한 방식은 동적 링크 메커니즘이다.Lua는 몇 가지 플랫폼을 위해 동적 링크 메커니즘을 실현했다.Lua가 제공하는 동적 링크에 대한 기능은 모두 하나의 함수에 모인다. 패키지.loadlib, 이 함수는 두 개의 문자열 인자가 있습니다. 동적 링크의 전체 경로와 함수 이름입니다.
local path = "/user/local/lib/lua/5.1/socket.so"
local f = package.loadlib(path, "luaopen_socket")
loadlib은 매우 밑바닥의 함수입니다.완전한 라이브러리 경로와 정확한 함수 이름을 제공해야 합니다.보통 Require를 사용하여 C 프로그램 라이브러리를 불러옵니다. 이 함수는 지정한 라이브러리를 검색한 다음loadlib로 라이브러리를 불러오고 초기화 함수를 되돌려줍니다.
8.3 오류
Lua는 다음과 같은 명시적인 error 함수를 사용하여 오류를 일으킬 수 있습니다.
if not then error() end
그와 같은 가격은 asserth 함수이다
assert(, ) -->
8.4 오류 예외 및 처리
Lua에서 오류를 처리하려면 함수 pcall을 사용하여 실행할 코드를 포장해야 합니다.사용 방법은 pcall을 통해 오류를 일으킬 수 있는 함수를 호출하는 것입니다.
if pcall(foo) then
else
end
pcall 함수는 '보호 모드' 로 첫 번째 인자를 호출합니다. 함수 실행종의 모든 오류를 포착할 수 있으며, 이로써 Lua에서 모든 이상 처리를 완성할 수 있습니다.
8.5 오류 정보와 트레이스
error 메시지는 일반적으로 오류 내용을 설명하는 문자열로 오류 발생에 대한 알 수 없는 정보를 추가합니다.error 함수는 두 번째 추가 매개 변수 층 level도 있습니다. 호출 층의 함수를 지정하여 현재 오류를 보고합니다. 즉, 물은 누가 오류를 책임져야 하는지를 설명합니다.
function foo(str)
if type(str) ~= "string" then
error("string expected", 2)
end
end
또한 debug 라이브러리는 두 개의 일반적인 오류 처리 함수를 제공합니다. 하나는 debug입니다.debug, 사용자가 오류의 원인을 검사할 수 있도록 Lua 알림을 제공합니다.다른 하나는 debug입니다.traceback, 호출 창고에 따라 확장된 오류 메시지를 구축합니다. 이 함수를 언제든지 호출해서 현재 실행 중인 창고 정보를 얻을 수 있습니다.이 두 함수는 xpcall 함수에 맞추어 사용할 수 있으며, xpcall은 pcall보다 매개 변수 - 오류 처리 함수가 하나 더 있습니다.오류가 발생하면 Lua에서 오류 처리 함수를 호출합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.