Najlepszy samouczek Moduł pakietu Lua W 2024 r. W tym samouczku możesz dowiedzieć się wymagają funkcji,pakiet C,

Moduł pakietu Lua

Moduł jest podobny do pakietu biblioteki, począwszy od Lua 5.1 Lua dodania standardowego mechanizmu zarządzania Moduł można umieścić jakiś wspólny kod w jednym pliku, w postaci interfejsu API połączeń w innych miejscach, na rzecz ponownego wykorzystania kodu i zmniejszyć sprzęgło code.

Moduł Lua jest tabela ze zmiennych, funkcji i innych znanych elementów, tworząc w ten sposób bardzo prosty moduł, jest stworzenie tabeli, wówczas należy wyeksportować stałych, funkcji, do której w końcu wrócił do stołu na linii. Poniżej zamieszczona jest stworzenie modułu niestandardowego module.lua, format kodu plik jest w następujący sposób:

-- 文件名为 module.lua
-- 定义一个名为 module 的模块
module = {}
 
-- 定义一个常量
module.constant = "这是一个常量"
 
-- 定义一个函数
function module.func1()
    io.write("这是一个公有函数!\n")
end
 
local function func2()
    print("这是一个私有函数!")
end
 
function module.func3()
    func2()
end
 
return module

Z powyższego wynika, struktura modułu jest strukturą tabeli, więc można wywołać tabelę jako element w działaniu do działania jako stała w module wywołującego lub funkcji.

Powyższy func2 zadeklarowane jako zmienne lokalne zablokować, co oznacza, że ​​prywatny funkcji, a zatem nie mogą być dostępne z zewnątrz prywatnej modułu funkcyjnego musi być wywoływana przez moduł funkcji publicznej.


wymagają funkcji

Lua posiada funkcję o nazwie wymagają służy do ładowania modułów. Aby załadować moduł, wystarczy nazwać. Na przykład:

require("<模块名>")

lub

require "<模块名>"

Wrócimy po wykonaniu wymagają stałej lub funkcji przez moduł składający się z tabeli i będzie zdefiniować zmienną globalną, która zawiera tabelę.

-- test_module.lua 文件
-- module 模块为上文提到到 module.lua
require("module")
 
print(module.constant)
 
module.func3()

Powyższy kod jest wykonywany w wyniku:

这是一个常量
这是一个私有函数!

Albo załadować moduły zdefiniować zmienną aliasu, łatwe połączenie:

-- test_module2.lua 文件
-- module 模块为上文提到到 module.lua
-- 别名变量 m
local m = require("module")
 
print(m.constant)
 
m.func3()

Powyższy kod jest wykonywany w wyniku:

这是一个常量
这是一个私有函数!

mechanizm Ładowanie

W przypadku modułów niestandardowych, a nie na który katalog plików zrobi, wymagają funkcja ma własną strategię ładowania ścieżka do pliku, próbuje załadować plik modułu z Lua lub C biblioteki programu.

Wymagaj ścieżka wyszukiwania dla pliku Lua jest przechowywany w zmiennej globalnej package.path po butach Lua, LUA_PATH początkowa wartość zmiennej środowiskowej do zmiennej środowiskowej. Jeśli nie możesz znaleźć zmienną środowiskową, domyślna ścieżka zdefiniowana przez inicjalizacji kompilacji.

Oczywiście, jeśli nie ma LUA_PATH tej zmiennej, można również dostosować ustawienia, otwarta w katalogu domowym plik .profile bieżącego użytkownika (nie tworzyć, można również otworzyć plik .bashrc), na przykład, "~ / lua /" Droga do przyłączenia środowiska LUA_PATH zmienna:

#LUA_PATH
export LUA_PATH="~/lua/?.lua;;"

Ścieżka do pliku "," rozdzielone finałowej dwójki ";;" oznacza nowo dodatkowy plus oryginalnej ścieżki domyślnej ścieżce.

Następnie zaktualizować parametry zmienne środowiskowe są uwzględniane natychmiast.

source ~/.profile

Następnie package.path zakładane są następujące wartości:

/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

Więc kiedy dzwoni require ( "moduł") będzie próbował otworzyć następujące katalogi plików, aby szukać celów.

/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

Jeśli zbliżył plik docelowy zostanie wywołana package.loadfile załadować moduły. W przeciwnym razie przejdź do bibliotek C.

Ścieżka wyszukiwania plików jest package.cpath uzyskane od zmiennej globalnej, a ta zmienna jest LUA_CPATH wstępnych zmiennych środowiskowych.

Strategia wyszukiwania z taka sama jak wyżej, ale teraz jest poszukiwanie takiej zamiany lub typ pliku DLL. Jeśli je znajdziesz, to będzie to wymagało od package.loadlib aby go załadować.


pakiet C

Lua i C są łatwo połączyć za pomocą C napisać pakiet Lua.

Napisz inny pakiet i Lua, pakiet C przed użyciem musi najpierw zostać załadowany i podłączony, w większości systemów jest najprostszym sposobem osiągnięcia mechanizmy Dynamic Link Library.

Lua zapewnia pełną funkcjonalność dynamicznego łączenia w funkcję o nazwie LOADLIB. Ta funkcja przyjmuje dwa argumenty: bezwzględną ścieżkę do funkcji biblioteki i inicjalizacji. Tak przykładem typowe połączenia jest:

local path = "/usr/local/lua/lib/libluasocket.so"
local f = loadlib(path, "luaopen_socket")

Funkcja LOADLIB ładuje określony bibliotekę i podłączony do Lua, ale nie otworzyć bibliotekę (czyli bez funkcji inicjowania połączeń), w przeciwnym razie wraca funkcję inicjalizacji w funkcji Lua, tak, że możemy nazwać go bezpośrednio w Lua.

Jeśli wystąpił błąd podczas ładowania biblioteki dynamicznej lub inicjalizacji funkcja wyszukiwania, LOADLIB zwraca komunikaty o błędach i zerowe. Możemy zmodyfikować poprzednią sekcję kodu do wykrywania błędów, a następnie wywołać funkcję inicjalizacji:

local path = "/usr/local/lua/lib/libluasocket.so"
-- 或者 path = "C:\\windows\\luasocket.dll",这是 Window 平台下
local f = assert(loadlib(path, "luaopen_socket"))
f()  -- 真正打开库

W normalnych okolicznościach oczekujemy uwolnienie biblioteki binarnym zawiera poprzedni fragment kodu plik podobny pośredniczącego, pliki binarne instalacji można łatwo umieścić w katalogu, wystarczy zmodyfikować plik binarny pliku pośredniczącego biblioteki odpowiada rzeczywistej ścieżki.

Katalog, w którym plik został dodany do LUA_PATH skrótowej, ustawienie to może być stosowane po załadowaniu biblioteki C funkcje nakazania.

Moduł pakietu Lua
10/30