Latest web development tutorials

Lua-Modul-Paket

Modul ist ähnlich wie bei einem Bibliothekspaket, von Lua Start 5.1, hinzugefügt Lua Standard-Modul-Management-Mechanismus, können Sie einige gemeinsamen Code in einer Datei setzen, in Form von API-Schnittstelle Anrufe in anderen Orten, zu Gunsten der Wiederverwendung von Code und reduzieren -Code-Kopplung.

Lua-Modul der Tabelle aus den Variablen, Funktionen und andere bekannte Elemente, so dass ein sehr einfaches Modul zu schaffen, ist eine Tabelle zu erstellen, ist die Notwendigkeit, die Konstanten zu exportieren, Funktionen, in die, endlich wieder an den Tisch auf der Linie. Im Folgenden wird das Erstellen eines benutzerdefinierten Modul module.lua, Formatdatei Code ist wie folgt:

-- 文件名为 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

Aus dem Vorstehenden ergibt, ist die Struktur des Moduls eine Tabellenstruktur, so dass man die Tabelle als ein Element in der Operation aufrufen kann als eine Konstante in dem anrufenden Modul oder Funktion zu bedienen.

Die obige func2 deklariert als lokale Variablen zu blockieren, die eine private Funktion bedeutet, und kann daher nicht von außerhalb des privaten Funktionsbaustein zugegriffen werden muss durch das Modul öffentliche Funktion aufgerufen werden.


erfordern Funktion

Lua bietet eine Funktion namens erfordern wird verwendet, um Module zu laden. Um ein Modul zu laden, einfach es nennen. Zum Beispiel:

require("<模块名>")

oder

require "<模块名>"

Wird nach der Ausführung Rückkehr eine Konstante oder Funktion durch ein Modul benötigt der Tabelle aus, und wird eine globale Variable definieren, die die Tabelle enthält.

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

Der obige Code wird als Ergebnis der Ausführung:

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

Oder laden Module einen Alias-Variable, einfach Aufruf zu definieren:

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

Der obige Code wird als Ergebnis der Ausführung:

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

Lademechanismus

Für kundenspezifische Module, nicht auf dem Dateiverzeichnis tun wird, benötigen Funktion eine eigene Dateipfad Ladestrategie hat, versucht es Moduldatei von Lua oder C-Programm-Bibliothek zu laden.

Erfordern Suchpfad für Lua-Datei in der globalen Variablen package.path gespeichert wird, nachdem die Lua-Stiefel, LUA_PATH Anfangswert der Umgebungsvariablen der Umgebungsvariablen. Wenn Sie nicht die Umgebungsvariable finden, der Standardpfad durch eine Kompilierung-Initialisierung definiert.

Natürlich, wenn es keine LUA_PATH diese Umgebungsvariable ist, können Sie auch die Einstellungen, öffnen Sie in der aktuellen Benutzers .profile-Datei (es nicht schaffen, können Sie auch öffnen Sie die Datei .bashrc), zum Beispiel die "~ / lua /" Pfad zu verbinden LUA_PATH Umgebung Home-Verzeichnis anpassen Variable:

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

Dateipfad ";" getrennt durch die beiden letzten ";;" steht für die neu hinzugekommenen und den ursprünglichen Pfad der Standardpfad.

Als nächstes aktualisieren Parameter Ihre Umgebungsvariablen sofort wirksam werden.

source ~/.profile

Dann package.path angenommenen Werte sind:

/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

Also wenn Sie anrufen erfordern ( "Modul") wird versuchen, die folgenden Dateiverzeichnisse zu öffnen für Ziele zu suchen.

/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

Wenn genähert wird die Zieldatei package.loadfile aufgerufen werden Module zu laden. Andernfalls gehen Sie zu C-Bibliotheken.

Datei-Suchpfad ist package.cpath von einer globalen Variablen erhalten, und diese Variable LUA_CPATH zu anfänglichen Umgebungsvariablen.

Suchstrategie mit dem gleichen wie oben, aber jetzt wird die Suche so ersetzt oder DLL-Datei-Typ. Wenn Sie es finden, dann wird es von package.loadlib erfordern es zu laden.


C-Paket

Lua und C werden unter Verwendung von C zu schreiben Lua Paket einfach kombiniert.

Schreiben Sie ein anderes Paket und Lua, C-Paket vor dem Gebrauch muss zuerst in den meisten Systemen geladen und angeschlossen ist, ist der einfachste Weg, Dynamic Link Library Mechanismen zu erreichen.

Lua bietet alle Funktionen der dynamischen Verknüpfung in einer Funktion namens loadlib. Diese Funktion nimmt zwei Argumente: den absoluten Pfad zu der Bibliothek und Initialisierungsfunktion. So ein Beispiel eines typischen Anruf ist:

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

loadlib Funktion lädt die angegebene Bibliothek und verbunden mit Lua, aber es lässt sich nicht öffnen Sie die Bibliothek (dh ohne Anruf Initialisierungsfunktion), ansonsten gibt er Initialisierungsfunktion als Lua-Funktion, so dass wir ihn direkt in Lua anrufen können.

Wenn der Fehler während aufgetreten eine dynamische Bibliothek oder Initialisierungsfunktion Lookup-Laden, gibt loadlib null und Fehlermeldungen. Wir können den vorherigen Abschnitt von Code modifizieren, Fehler zu erkennen und dann die Initialisierung-Funktion aufrufen:

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

Unter normalen Umständen erwarten wir die Freigabe der binären Bibliothek enthält eine vorherige Code-Snippet ähnliche Stub-Datei können die Installation Binärdateien leicht in einem Verzeichnis abgelegt werden, müssen Sie nur die binäre Bibliothek Stub-Datei entspricht dem tatsächlichen Pfad zu ändern.

Das Verzeichnis, in dem Sie die Datei auf dem Stummel LUA_PATH hinzugefügt wurde, kann diese Einstellung nach dem Laden der Bibliotheksfunktionen der erfordern C eingesetzt werden.