ubuntuusers.de

Lua

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

lua.gif 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, 5.1 und 5.2 verfügbar, für Ubuntu 16.04 und neuer zusätzlich auch Lua 5.3.

Dieses lässt sich über

  • lua5.3 (universe)

Paketliste zum Kopieren:

sudo apt-get install lua5.3 

Oder mit apturl installieren, Link: apt://lua5.3

installieren, Lua 5.2 kann über

  • lua5.2

Paketliste zum Kopieren:

sudo apt-get install lua5.2 

Oder mit apturl installieren, Link: apt://lua5.2

installiert werden[1].

Dabei wird sowohl der alleinstehende Interpreter als auch die C-Bibliothek zum Einbinden in eigene Projekt installiert.

Optional kann man noch die Dokumentation für Lua 5.2 über das Paket

  • lua5.2-doc (universe)

Paketliste zum Kopieren:

sudo apt-get install lua5.2-doc 

Oder mit apturl installieren, Link: apt://lua5.2-doc

installieren.

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 unter search?suite=all&section=all&arch=any&keywords=lua&searchon=names 🇩🇪.

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 von require. 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 Wert wert 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 10 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 Funktion mal_pi übergeben, dass Ergebnis wird mittels print 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

Diese Revision wurde am 7. Oktober 2019 00:49 von ubot erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung