lua 오류 처리

2607 단어

번역하다

  • loadstring은 컴파일할 때 어법역과 관련이 없다. 즉, 전역 환경에서 자신의 문자열을 컴파일한다.물론 문자열에서local현식으로 국부 변수를 지정할 수 있습니다..
  • loadfile에서 루아 파일을 컴파일하고 루아 파일의 내용을 사용하기 전에 루아 파일에 대한 정의가 필요합니다. 방법은 다음과 같습니다. f=loadfile("foo.lua").f();

  • 오류 처리

  • error가 이상을 던졌습니다. 만약에 error가 호출되면 매개 변수를 반환값으로 되돌려줍니다
  • assert의 첫 번째 매개 변수가 가짜(표현식 또는 함수의 반환값이false 또는nil)일 때 프로그램을 종료합니다.함수 기본 반환값은nil입니다.void 함수와 유사하기 때문에assert로 void 함수를 호출하면 프로그램을 종료합니다..
  • pcall(func[, func_arg1,...]),첫 번째 매개 변수는 호출된 함수이고, 그 다음은 이 함수의 매개 변수이다.pcall의 첫 번째 반환값은 pcall의 반환값(false: 함수 이상 투척,true: 함수 이상 투척 없음)이고 그 다음은 호출된 함수의 반환값입니다.호출된 함수에 이상이 발생하면 프로그램을 종료하지 않습니다..
  • xpcall(func, debug_func [, func_arg1,...] ),첫 번째 매개 변수는 호출된 함수이고, 두 번째 매개 변수는 이상한 함수를 처리하는 것입니다. (error가 호출되었을 때, 이 함수를 호출합니다. 실참은 error가 값을 되돌려 제공하는 것입니다. 즉, error의 실참입니다.) 그 다음 매개 변수는func 함수의 매개 변수입니다..
  • -- 8   
    function loadfileTest()
        f = loadfile("5function.lua")
        print("-------------after loadfile------------")
        f() --  
        print("-------------after dingyi--------------")
        main()
    end
    
    --[[  main , loadfile main 
    function main()
        loadfileTest()
        os.exit()
    end]]
    
    function errorTest()
        local function _foo(a)
            if not a then
                 error{code=1, msg="arg is nil"}
             elseif tostring(type(a)) ~= "number" then
                 error{code=2, msg="arg is not number"}
             elseif a%3==0 then
                 error{code=3, msg="arg is multiple of 3"}
            end
            io.write(string.format("OK, number a is %d
    ", a)) return true, "OK" --return false --test assert end local res = assert(_foo(31), "test assert") --assert --assert(false, "test boolean") --pcall , pcall , local pcallRes, errorMsg = pcall(_foo, "3") if not pcallRes then print(errorMsg.code, errorMsg.msg) end print("Test xpcall______________________") local function debug_(eTable) print("debug_ is called") print("table from error to debug_:",eTable.code, eTable.msg) return {code=-1, msg="xpcall return debug_'s return value"} end local xpcallRes, _fooRes1, _fooRes2 = xpcall(_foo, debug_, 6) if not xpcallRes then -- res false, debug_ , error , debug_ print("debug_ has been called") else print("_foo results are ", _fooRes1, _fooRes2) end os.exit() end --loadfileTest() errorTest()

    좋은 웹페이지 즐겨찾기