Lua - Module

Was ist ein Modul?

Das Modul ist wie eine Bibliothek, die mit require geladen werden kann und einen einzigen globalen Namen hat, der eine Tabelle enthält. Dieses Modul kann aus einer Reihe von Funktionen und Variablen bestehen. Alle diese Funktionen und Variablen sind in die Tabelle eingebunden, die als Namespace fungiert. Ein gut erzogenes Modul verfügt auch über die erforderlichen Vorkehrungen, um diese Tabelle bei Bedarf zurückzugeben.

Spezialität der Lua-Module

Die Verwendung von Tabellen in Modulen hilft uns auf vielfältige Weise und ermöglicht es uns, die Module auf die gleiche Weise zu manipulieren, wie wir jede andere Lua-Tabelle manipulieren. Aufgrund der Möglichkeit, Module zu manipulieren, bietet es zusätzliche Funktionen, für die andere Sprachen spezielle Mechanismen benötigen. Aufgrund dieses freien Mechanismus von Modulen in Lua kann ein Benutzer die Funktionen in Lua auf verschiedene Arten aufrufen. Einige davon sind unten aufgeführt.

-- Assuming we have a module printFormatter
-- Also printFormatter has a funtion simpleFormat(arg)
-- Method 1
require "printFormatter"
printFormatter.simpleFormat("test")

-- Method 2
local formatter = require "printFormatter"
formatter.simpleFormat("test")

-- Method 3
require "printFormatter"
local formatterFunction = printFormatter.simpleFormat
formatterFunction("test")

Im obigen Beispielcode können Sie sehen, wie flexibel die Programmierung in Lua ohne speziellen zusätzlichen Code ist.

Die erfordern Funktion

Lua hat eine High-Level-Funktion namens require bereitgestellt , um alle erforderlichen Module zu laden. Es wird so einfach wie möglich gehalten, um zu vermeiden, dass zu viele Informationen über das Modul zum Laden vorhanden sind. Die Funktion require setzt die Module lediglich als Codeabschnitt voraus, der einige Werte definiert, dh Funktionen oder Tabellen, die Funktionen enthalten.

Beispiel

Betrachten wir ein einfaches Beispiel, in dem eine Funktion die mathematischen Funktionen hat. Nennen wir dieses Modul mymath und Dateiname mymath.lua. Der Dateiinhalt ist wie folgt:

local mymath =  {}

function mymath.add(a,b)
   print(a+b)
end

function mymath.sub(a,b)
   print(a-b)
end

function mymath.mul(a,b)
   print(a*b)
end

function mymath.div(a,b)
   print(a/b)
end

return mymath

Um auf dieses Lua-Modul in einer anderen Datei, z. B. moduletutorial.lua, zugreifen zu können, müssen Sie das folgende Codesegment verwenden.

mymathmodule = require("mymath")
mymathmodule.add(10,20)
mymathmodule.sub(30,20)
mymathmodule.mul(10,20)
mymathmodule.div(30,20)

Um diesen Code auszuführen, müssen wir die beiden Lua-Dateien im selben Verzeichnis ablegen. Alternativ können Sie die Moduldatei im Paketpfad ablegen und sie muss zusätzlich eingerichtet werden. Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe.

30
10
200
1.5

Dinge, an die man sich erinnern sollte

  • Platzieren Sie sowohl die Module als auch die Datei, die Sie ausführen, im selben Verzeichnis.

  • Der Modulname und sein Dateiname sollten identisch sein.

  • Es wird empfohlen, Module für die erforderliche Funktion zurückzugeben. Daher sollte das Modul vorzugsweise wie oben gezeigt implementiert werden, obwohl Sie andere Arten von Implementierungen an anderer Stelle finden können.

Alte Art, Module zu implementieren

Lassen Sie mich jetzt dasselbe Beispiel auf ältere Weise umschreiben, wobei der Implementierungstyp package.seeall verwendet wird. Dies wurde in den Lua-Versionen 5.1 und 5.0 verwendet. Das mymath-Modul ist unten dargestellt.

module("mymath", package.seeall)

function mymath.add(a,b)
   print(a+b)
end

function mymath.sub(a,b)
   print(a-b)
end

function mymath.mul(a,b)
   print(a*b)
end

function mymath.div(a,b)
   print(a/b)
end

Die Verwendung von Modulen in moduletutorial.lua wird unten gezeigt.

require("mymath")
mymath.add(10,20)
mymath.sub(30,20)
mymath.mul(10,20)
mymath.div(30,20)

Wenn wir das oben genannte ausführen, erhalten wir die gleiche Ausgabe. Es wird jedoch empfohlen, die ältere Version des Codes zu verwenden, und es wird davon ausgegangen, dass er weniger sicher ist. Viele SDKs, die Lua zum Programmieren verwenden, wie das Corona SDK, haben die Verwendung dieses SDKs abgelehnt.