Lua 학습의 길(13)----------Lua 모듈(C#의 명명 공간과 같음)과 패키지

4880 단어
모듈은 하나의 봉인 라이브러리와 유사하다. Lua5.1부터 Lua는 표준적인 모듈 관리 메커니즘을 추가했다. 일부 공용 코드를 한 파일에 넣고 API 인터페이스의 형식으로 다른 곳에서 호출하면 코드의 재사용과 코드 결합도를 낮출 수 있다.
Lua의 모듈은 변수, 함수 등 이미 알고 있는 요소로 구성된 테이블이기 때문에 하나의 모듈을 만드는 것은 매우 간단하다. 바로 테이블을 만들고 내보내야 할 상수, 함수를 그 안에 넣고 마지막에 이 테이블로 돌아가면 된다.다음은 사용자 정의 모듈 모듈을 만드는 것입니다.lua, 파일 코드 형식은 다음과 같습니다.
--      module.lua
--        module    
module = {}
 
--       
module.constant = "      "
 
--           module(   )              
function module.func1()
    io.write("        !
") end local function func2() print(" !") --local , end function module.func3() func2() end return module

위에서 알 수 있듯이 모듈의 구조는 하나의 테이블 구조이기 때문에 테이블의 요소를 조작하는 것처럼 모듈의 상수나 함수를 조작할 수 있다.
위의func2는 프로그램 블록의 국부 변수, 즉 하나의 사유 함수를 표시하기 때문에 외부에서 모듈에 접근할 수 없는 이 사유 함수는 반드시 모듈의 공유 함수를 통해 호출해야 한다.

require 함수 Lua는 모듈을 로드하기 위해 Require라는 함수를 제공합니다.모듈을 불러오려면 간단하게 호출하면 된다.예를 들면 다음과 같습니다. require("") 혹은 require "" Require를 실행하면 모듈의 상수나 함수로 구성된 테이블을 되돌려주고, 이 테이블을 포함하는 전역 변수를 정의합니다. -- test_module.lua 파일 -- 모듈은 위에서 언급한 모듈입니다.lua require("module") print(module.constant) module.func3() 위의 코드 실행 결과는 다음과 같습니다. 이것은 상수이다 이것은 사유 함수다! 또는 로드된 모듈에 호출하기 쉬운 별칭 변수를 정의합니다. -- test_module2.lua 파일 -- 모듈은 위에서 언급한 모듈입니다.lua -- 별칭 변수 m local m = require("module") print(m.constant) m.func3() 위의 코드 실행 결과는 다음과 같습니다. 이것은 상수이다 이것은 사유 함수다!

로드 메커니즘 사용자 정의 모듈에 대해 모듈 파일은 어느 파일 디렉터리에 두어도 되는 것이 아닙니다. 함수 Require는 자신의 파일 경로 로드 정책을 가지고 있으며, Lua 파일이나 C 프로그램 라이브러리에서 모듈을 로드하려고 시도합니다. require에서 Lua 파일을 검색하는 경로는 전역 변수 패키지에 저장됩니다.path에서 Lua가 시작되면 환경 변수 LUAPATH 값은 환경 변수를 초기화합니다.이 환경 변수를 찾지 못하면 컴파일할 때 정의한 기본 경로를 사용해서 초기화합니다. 물론 LUA가 없으면PATH라는 환경 변수는 현재 사용자 루트 디렉토리에서 열기 위한 사용자 정의 설정도 가능합니다.profile 파일 (없으면 생성하고.bashrc 파일을 열어도 됩니다), 예를 들어 "~ / lua/" 경로를 LUA 에 추가합니다.PATH 환경 변수: #LUA_PATH export LUA_PATH="~/lua/?.lua;;" 파일 경로는;번호 구분, 마지막 2개 ";"새로 추가된 경로 뒤에 원래 기본 경로가 추가됨을 나타냅니다. 그런 다음 환경 변수 매개 변수를 업데이트하여 즉시 적용합니다. source ~/.profile 이 때 패키지를 가정합니다.path 값은 다음과 같습니다. /Users/dengjoe/lua/?.lua;./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua 그러면 Require ("module") 를 호출할 때 다음 파일 디렉터리를 열어 대상을 검색하려고 시도합니다. /Users/dengjoe/lua/module.lua; ./module.lua /usr/local/share/lua/5.1/module.lua /usr/local/share/lua/5.1/module/init.lua /usr/local/lib/lua/5.1/module.lua /usr/local/lib/lua/5.1/module/init.lua 대상 파일을 찾으면 패키지가 호출됩니다.loadfile에서 모듈을 불러옵니다.그렇지 않으면 C 프로그램 라이브러리를 찾을 것입니다. 검색된 파일 경로는 전역 변수 패키지입니다.cpath에서 가져옵니다. 이 변수는 환경 변수 LUA 를 통해 가져옵니다.CPATH로 시작합니다. 검색 정책은 위와 같습니다. 단지 현재 검색하는 파일이 so나 dll 형식의 파일로 바뀌었을 뿐입니다.만약 찾을 수 있다면, 리퀴어는 패키지를 통과할 것이다.loadlib에서 불러옵니다.

C팩 루아와 C는 결합하기 쉬워서 C를 사용하여 루아를 위해 가방을 쓴다. Lua의 쓰기 패키지와 달리 C 패키지는 사용하기 전에 반드시 먼저 불러오고 연결해야 한다. 대부분의 시스템에서 가장 쉬운 실현 방식은 동적 연결 라이브러리 메커니즘을 통해 연결하는 것이다. Lua는loadlib이라는 함수에서 모든 동적 연결 기능을 제공합니다.이 함수는 두 가지 인자가 있습니다: 라이브러리의 절대 경로와 초기화 함수입니다.그래서 전형적인 호출의 예는 다음과 같다. local path = "/usr/local/lua/lib/libluasocket.so" local f = loadlib(path, "luaopen_socket") loadlib 함수는 지정한 라이브러리를 불러와서 Lua에 연결합니다. 그러나 라이브러리를 열지 않습니다. (즉 초기화 함수를 호출하지 않았다는 뜻입니다.) 반대로 초기화 함수를 Lua의 함수로 되돌려줍니다. 그러면 Lua에서 직접 호출할 수 있습니다. 동적 라이브러리를 불러오거나 초기화 함수를 찾을 때 오류가 발생하면loadlib은nil과 오류 정보를 되돌려줍니다.이전 코드를 수정하여 오류를 감지한 다음 초기화 함수를 호출할 수 있습니다. local path = "/usr/local/lua/lib/libluasocket.so" - 또는 path = "C:\\windows\\luasocket.dll", Windows 플랫폼 아래 local f = assert(loadlib(path, "luaopen_socket")) f () - 라이브러리 열기 일반적인 상황에서 우리는 2진법의 발표 라이브러리에 앞의 코드 세그먼트와 비슷한 stub 파일을 포함하기를 희망한다. 2진법 라이브러리를 설치할 때 어떤 디렉터리에 아무렇게나 놓을 수 있다. stub 파일이 2진법 라이브러리에 대응하는 실제 경로를 수정하면 된다. LUA에 stub 파일이 있는 디렉토리 추가PATH, 이렇게 설정하면 Require 함수를 사용하여 C 라이브러리를 불러올 수 있습니다.

좋은 웹페이지 즐겨찾기