Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
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, der Desktop-Kalender Rainlendar oder der MySQL Proxy sind über Lua-Skripte erweiterbar.
Lua ist in mehreren Versionen in den Quellen verfügbar. Aktuell ist die Version 5.2, welche sich über das Paket
lua5.2 (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install lua5.2
sudo aptitude install lua5.2
installieren lässt [1]. Dabei wird sowohl der alleinstehende Interpreter als auch die C-Bibliothek zum Einbinden in eigene Projekt installiert.
Optional kann man noch die Dokumentation über das Paket
lua5.2-doc (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install lua5.2-doc
sudo aptitude install lua5.2-doc
installieren. Weitere Versionen in den offiziellen Paketquelle sind lua50 und lua5.1 (beide in universe).
Für Trusty 14.04 gibt es 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 bei der Ubuntu Paketsuche .
Eine vollständige Übersicht über die Lua-Befehle findet man im "Lua Reference Manual", Kapitel 5 .
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.
Der interaktive Interpreter lässt sich über den Befehl
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
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
|
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 .
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 26. Dezember 2016 18:10 von noisefloor erstellt.