Lua
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Lua 🇬🇧 ist eine Programmiersprache, welche sich durch einen besonders kleinen Interpreter auszeichnet. Dies ist dadurch bedingt, dass Lua nicht als "allumfassende" Programmiersprache konzipiert war bzw. ist, sondern als Erweiterung von C um eine eingebettete Skriptsprache. Es steht jedoch auch ein alleinstehender Lua-Interpreter zur Verfügung. Durch die geringe Größe des Interpreters sind Lua-Skripte auch sehr schnell.
Lua unterstützt in erster Linie prozedurale Programmierung, allerdings sind auch andere Programmieransätze inklusive Objektorientierung möglich.
Lua bietet trotz der geringen Größe einen vollständigen Satz an "Grundbefehlen", wie man ihn auch von anderen Programmiersprachen her kennt. Des Weiteren bietet Lua weitere Annehmlichkeiten moderner Sprachen wie z.B. dynamische Typisierung, einen automatischen Garbage-Collector, Erzeugen eines plattformunabhängigen Bytecodes und Verfügbarkeit für diverse Plattformen 🇬🇧. Außerdem ist Lua über Module, die Luarocks 🇬🇧, erweiterbar.
Lua wird von einer Reihe von Projekten / Programmen als Erweiterung eingesetzt. Das bekannteste ist vielleicht World of Warcraft 🇩🇪, aber auch der Fenstermanager Ion3 oder der Desktop-Kalender Rainlendar sind über Lua-Skripte erweiterbar.
Installation¶
Lua ist in mehreren Versionen 🇬🇧 in den Quellen verfügbar. Es sind Lua 5.0 (nur bis einschließlich Impish 21.10) 5.1, 5.2, Lua 5.3 und Lua 5.4 (ab Impish 21.10) verfügbar.
Beispiel für die Paketinstallation von Lua 5.3:
lua5.3 (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install lua5.3
Oder mit apturl installieren, Link: apt://lua5.3
Dabei wird sowohl der alleinstehende Interpreter als auch die C-Bibliothek zum Einbinden in eigene Projekt installiert.
Andere Lua-Versionen lassen sich entsprechend über die Pakete lua50 (nur bis einschließlich Impish), lua5.1, lua5.2 und lua5.4 (ab Impish) installieren, alle Pakete liegen in dem Universe-Quellen.
weitere Lua-Bibliotheken¶
Es gibt in den offiziellen Paketquellen, Sektion universe, eine ganze Reihe weiterer Lua-Bibliotheken (z.B. Datenbankanbindungen, Netzwerk- / Webprogrammierung uvm.). Die Paketnamen beginnen alle mit lua-, eine vollständige Übersicht gibt es in der Paketsuche 🇩🇪.
Nutzung¶
Eine vollständige Übersicht über die Lua-Befehle findet man im "Lua Reference Manual", Kapitel 5 für Lua 5.2 🇬🇧 bzw. Kapitel 5 für Lua 5.3 🇬🇧
Wichtig für das Verständnis und den effektiven Einsatz von Lua ist der Datentyp table 🇬🇧. Hierbei handelt es sich nicht um eine Tabelle im herkömmlichen Sinne, sondern um ein Assoziatives_Array. Lua organisiert sich in großen Teile über tables, auch wenn dies für den Nutzer nicht immer direkt sichtbar ist. Über metatables 🇬🇧 kann das Verhalten von Lua auch beeinflusst bzw. erweitert werden, allerdings nur über die C-API.
Alleinstehender Interpreter¶
Der interaktive Interpreter für Lua 5.3 lässt sich über den Befehl
lua5.3
bzw. für Lua 5.2 und kleiner:
lua
starten[2]. Man befindet sich nun im interaktiven Modus und kann einzelne Lua-Befehle eingeben. Zeilen können in Lua mit einem Semikolon ;
abgeschlossen werden, dies ist aber nicht zwingend erforderlich. Der Interpreter erkennt auch selbstständig, ob eine Zeile in sich abgeschlossen ist (z.B. nach einer Variablen-Deklaration) oder ob noch weitere Zeilen folgen müssen (z.B. nach dem öffnen einer Schleife mit for
). Der Prompt im Interpreter ändert sich dann auch von >
auf >>
.
Möchte man ein Skript direkt mit dem Aufruf des Interpreters ausführen, so lautet der Befehl
lua SKRIPTNAME #bzw. lua5.3 SKRIPTNAME
Der Lua-Interpreter kennt einige Optionen, welche in den Manpages beschrieben sind.
Natürlich können Lua-Skripte auch mit einem passenden Shebang versehen werden, so dass beim Aufruf des Skripts der Interpreter automatisch gestartet wird. Die entsprechende Zeile lautet:
1 | #!/usr/bin/lua
|
Oder alternativ:
1 | #!/usr/bin/env lua
|
Einbindung in C¶
Um Lua innerhalb von C-Programmen zu nutzen, muss man nur die Bibliothek "lua.h" einbinden.
C kann dann Lua-Skripte aufrufen und Lua kann auch C-Funktionen ausführen. Die Kommunikation zwischen C und Lua erfolgt dabei über einen Stack.
Eine vollständige Befehlsübersicht der C-API findet man im "Lua Reference Manual", Kapitel 4 🇬🇧.
Beispielskript¶
Im folgenden ein einfaches, kurzes Beispielskript, was einen kleine Einblick in die Syntax von Lua gewährt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | require("math") function mal_pi(wert) if type(wert) == "number" then return (wert * math.pi) else return "'" .. wert .. "'" .. " ist keine Zahl - kann nicht mit PI multipliziert werden!" end end tab = {} tab[1], tab[2] = 10, 20 tab["schluessel1"] = "wert1" tab["schluessel2"] = 25 tab[3] = "wert2" tab[4] = 30 print("Schlüssel/Index : Wert") for k,v in pairs(tab) do print(k,":",v) end print("\nMultipliziere PI mit jeder Zahl:") for n,v in ipairs(tab) do x = mal_pi(v) print(x) end -- ein Kommentar :-) |
Erklärung:
In der 1. Zeile wird das Modul
math
geladen (Hinweis: dient hier nur zur Veranschaulichung vonrequire
. Das Modul "math" gehört zur Standarddistribution und wird immer automatisch mit geladen).In den Zeilen 3 bis 9 wird die Funktion
mal_pi
definiert. Diese erwartet einen Wertwert
der, falls es eine Zahl ist, mit PI multipliziert wird.In den Zeilen 11 bis 16 wird der table
tab
definiert. Es gibt vier Werte mit numerischem Index und zwei mit einen Schlüssel.In den Zeilen 19 bis 21 wird über die Schlüssel-Werte Paare von
tab
iteriert und das Schlüssel-Werte Paar ausgegeben.In den Zeilen 25 bis 28 wird über alle Elemente von
tab
mit numerischen Index iteriert. Der Wert wird an die Funktionmal_pi
übergeben, dass Ergebnis wird mittelsprint
ausgegeben.Zeile 29 enthält einen einzeiligen Kommentar.
Die Ausgabe sieht so aus:
Schlüssel/Index : Wert 1 : 10 2 : 20 3 : wert2 4 : 30 schluessel2 : 25 schluessel1 : wert1 Multipliziere PI mit jeder Zahl: 31.415926535898 62.831853071796 'wert2' ist keine Zahl - kann nicht mit PI multipliziert werden! 94.247779607694
Links¶
Lua-Users.org 🇬🇧 - Lua-Community
Lua - enthält viele Code-Beispiele