Inhaltsverzeichnis

Lua ist interpretiert und verfügt über ein REPL.
Ende von Statements/Instruktionen wird automatisch erkannt, es können also mehrere auf einer Zeile stehen ohne Trennzeichen oder Zeilenumbruch.

Allgemein

Keywords/Onboard-Funktionen

Variablen

a, g, f = 1, 3

Scopes/local

a=6
do
    local a=1
    print(a)
end
print(a)

Kommentare

dofile

Importiert alles aus einer Datei in den lokalen Namespace.

dofile("somefile.lua)

Anschließend können die Funktionen in somefile.lua benutzt werden als wären sie in der lokalen Datei.
Im Prinzip wie wenn man in Python import x from y macht.

function

Definiert eine Funktion

function somename(parameter1, parameter2)
   somecode
end

Funktionen:

Tables

a={}  --Erstellt leere Table
print(a[5]) --Gibt nil zurück, da der Key nicht existiert
a.x=6 --Setzt den Index "x" auf 6
print(a["x"]) --Ergibt 6

a="Hallo"
b=a --b hat jetzt auch den Wert "Hallo"
a="Anders"
print(b) --das gibt "Hallo" zurück, da der Wert von a an b kopiert wurde, nicht die Referenz
c={}
c.x=6
d=c --d und c verweisen jetzt auf die gleiche table als Referenz, nicht als Wert
d.x=8
print(c.x) --das gibt 8 zurück, da c und d auf die gleiche table verweisen, nicht auf den gleichen Wert

for key, value in ipairs(mytable) do
  print(key, value)
end

Instanzieren

a={2,3,x=6}
print(a[1])
print(a["x"])

Iterieren

Funktioniert über Funktionen.

a={6,8,'bla'='blub', 99}
for key, value in pairs(a) do
    print(key, value)
end

for key, value in ipairs(a) do
    print(key, value)
end

Operators

Arithmetische Operatoren

Vergleichsoperatoren

Logische Operatoren

a and b or c

String-Verkettung

"bla" .. "blub"
a .. "Blub"

“..„ ist der Verkettungsoperator

if-then-elif-else

if a > b then
    print("A is bigger than B")
elif a < b then
    print("A is smaller than B)
else
    print("A is equal to B or something else ;)")
end

while

i=0
while i<5 do
    print(i)
    i = i + 1
end

repeat-until

i=0
repeat
    print(i)
    i = i + 1
until 

numerische for-Schleife

for i=0, 5, 1 do
    print(i)
end

Führt die Schleife beginnend bei 0 bis 5 in Schritten von 1 aus.

Abstrakt sieht es so aus:

for Variable=Startwert, Stop-Wert, Schritt-Länge do
   Code
end

Generische for-Schleife

a = {"a","b","c","d"}
for i, v in ipairs(a) do
    print(v)
end

Abstrakt:

for Variablen in Iteratoren do
    Code
end

break

return

Funktionen

function myfunction(param1, param2)
      somecode
end

myfunction("a")

Rückgabewerte

function somefunction()
    return "return1", "return2"
end

somefunction()
a = somefunction()
b, c = somefunction()
d, e, f = somefunction()

Variable Anzahl Paramater

function my(param1, ...)
    print(param1)
    print(unpack(arg))
end

my(1,2,3,4,5)

Named Arguments:

Anonyme Funktionen/Lambda

function dosomething(f, parameter)
    f(parameter)
end

dosomething(function (string) print(string) end, "hello")

Closure

function outer(base)
    local result = base * 5
    inner = function()
        print(result)
        end
    return inner
end

bla = outer(6)
bla()

Begriffe/Konzepte

Begriff Beschreibung
ChunkEin Satz von Instruktionen die nacheinander ausgeführt werden (in einem Schwung). Das kann eine einzelne Zeile (bis man Enter drückt) im REPL (interaktive Konsole) sein oder eine ganze Datei.