Najlepszy samouczek Moduł pakietu Lua W 2024 r. W tym samouczku możesz dowiedzieć się wymagają funkcji,pakiet C,
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.
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:
这是一个常量 这是一个私有函数!
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ć.
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.